I followed your instructions by setting the type to "datetime", but the problem still persists. Sample code below:
Code:
package com.corp.smartgwt.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.i18n.client.DateTimeFormat; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.util.DateUtil; import com.smartgwt.client.widgets.form.fields.RadioGroupItem; import com.smartgwt.client.widgets.form.fields.RelativeDateItem; import com.smartgwt.client.util.DateDisplayFormatter; import com.smartgwt.client.util.DateParser; import com.smartgwt.client.util.SC; import com.smartgwt.client.data.RelativeDate; import com.smartgwt.client.docs.DateInputFormat; import com.smartgwt.client.types.DateDisplayFormat; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.TimeUnit; import com.smartgwt.client.widgets.form.fields.events.ChangeEvent; import com.smartgwt.client.widgets.form.fields.events.ChangeHandler; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.form.fields.events.ShowValueEvent; import com.smartgwt.client.widgets.form.fields.events.ShowValueHandler; import com.smartgwt.client.widgets.form.validator.DateRangeValidator; import java.util.Date; import java.util.LinkedHashMap; public class SmartGwt implements EntryPoint { private RelativeDateItem theStartDateItem; private RelativeDateItem theEndDateItem; private static String DATE_FORMAT = "dd.MMM.yyyy HH:mm"; private static String RADIOGROUP_NAME = "radiogroup1"; private RadioGroupItem theFilterRadioGroup; private static final String RB1_LABEL_TEXT = "Disable"; private static final String RB2_LABEL_TEXT = "Set Value Now and Enable"; private static final String RB3_LABEL_TEXT = "Just Enable"; private final static LinkedHashMap<String, String> theDatePresets = new LinkedHashMap<String, String>(); private final DateTimeFormat dateFormatter = DateTimeFormat.getFormat(DATE_FORMAT); static { theDatePresets.put("$now", "Now"); theDatePresets.put("$today", "Today"); theDatePresets.put("$yesterday", "Yesterday"); theDatePresets.put("$tomorrow", "Tomorrow"); theDatePresets.put("-1w", "Current day of last week"); theDatePresets.put("+1w", "Current day of next week"); theDatePresets.put("+1m", "Current day of next month"); theDatePresets.put("-1m", "Current day of last month"); } @Override public void onModuleLoad() { HLayout layout = new HLayout(); changeDateFormat(); DynamicForm form = new DynamicForm(); form.setFields(getFilterRadioGroup(), getStartDateItem(), getEndDateItem()); layout.addMember(form); layout.draw(); } /** * This method returns a RadioGroupItem consisting of None, * Image Date, and Load Date. It uses lazy initialization. * @return RadioGroupItem */ private RadioGroupItem getFilterRadioGroup() { if (theFilterRadioGroup == null) { theFilterRadioGroup = new RadioGroupItem(RADIOGROUP_NAME); theFilterRadioGroup.setValueMap(RB1_LABEL_TEXT, RB2_LABEL_TEXT, RB3_LABEL_TEXT); theFilterRadioGroup.setShowTitle(false); theFilterRadioGroup.setDefaultValue(RB1_LABEL_TEXT); theFilterRadioGroup.setGlobalTabIndex(21); getStartDateItem().setDisabled(true); getEndDateItem().setDisabled(true); theFilterRadioGroup.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { if (theFilterRadioGroup.getValueAsString().equals(RB1_LABEL_TEXT)) { getStartDateItem().setDisabled(true); getEndDateItem().setDisabled(true); } else if (theFilterRadioGroup.getValueAsString().equals(RB2_LABEL_TEXT)) { getStartDateItem().enable(); getEndDateItem().enable(); getStartDateItem().setValue("$now"); } else { getStartDateItem().enable(); getEndDateItem().enable(); } } }); } return theFilterRadioGroup; } private void changeDateFormat() { DateUtil.setShortDatetimeDisplayFormatter(new DateDisplayFormatter() { public String format(Date date) { if(date == null) { System.out.println("date is null"); return null; } else { System.out.println("setShortDatetimeDisplayFormatter = " + date.toString()); return dateFormatter.format(date); } } }); // It is a requirement that we implement a custom date parser or the onChanged event // will not fire. DateUtil.setDateParser(new DateParser() { public Date parse(String dateString) { if (dateString == null) { System.out.println("dateString is null"); return null; } System.out.println("parse = " + dateString); Date ret = null; try { ret = dateFormatter.parseStrict(dateString); System.out.println(ret.toString()); } catch (Exception ex) { System.out.println(ex.toString()); } return ret; } }); } private RelativeDateItem getStartDateItem() { if (theStartDateItem == null) { theStartDateItem = new RelativeDateItem("start_date"); theStartDateItem.setTitle("Start"); theStartDateItem.setShowFutureOptions(false); theStartDateItem.setShowPastOptions(true); theStartDateItem.setTimeUnitOptions(getTimeOptions()); theStartDateItem.setDefaultQuantity(1); theStartDateItem.setPresetOptions(theDatePresets); theStartDateItem.setOverflow(Overflow.VISIBLE); theStartDateItem.setType("datetime"); theStartDateItem.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { SC.logWarn("Start ChangedHandler"); } }); } return theStartDateItem; } /** * This will return an array of SmartGWT TimeUnit options that we want to add to our drop-down * for the Start and End date RelativeDateItem's * * @return array of TimeUnit's */ private TimeUnit[] getTimeOptions() { TimeUnit[] units = new TimeUnit[5]; units[0] = TimeUnit.HOUR; units[1] = TimeUnit.DAY; units[2] = TimeUnit.WEEK; units[3] = TimeUnit.MONTH; units[4] = TimeUnit.YEAR; return units; } /** * This will initialize and construct the end RelativeDateItem * @return Ending RelativeDateItem */ private RelativeDateItem getEndDateItem() { if (theEndDateItem == null) { theEndDateItem = new RelativeDateItem("end_date"); theEndDateItem.setTitle("End:"); theEndDateItem.setOverflow(Overflow.VISIBLE); theEndDateItem.setShowFutureOptions(false); theEndDateItem.setShowPastOptions(true); theEndDateItem.setTimeUnitOptions(getTimeOptions()); theEndDateItem.setDefaultQuantity(1); theEndDateItem.setPresetOptions(theDatePresets); theEndDateItem.setType("datetime"); theEndDateItem.addChangedHandler(new ChangedHandler() { @Override public void onChanged(ChangedEvent event) { SC.logWarn("End changed handler"); } }); } return theEndDateItem; } }
Comment