Hi,
There is custom validator attached to DataSource field 'dateTo'. This validator depends on 'validFrom' field.
Edit enabled ListGrid uses this DataSource:
If you run this test case, enter grid's edit mode and change 'validTo' field value (the one validator is attached), then console shows this:
But if you run test case again and this time change 'validFrom' field value (dependent field), then console shows:
Value in condition() method is not set (null), so validator is not able to work properly in real application.
Thanks,
MichalG
SmartClient Version: v11.0p_2016-07-07/LGPL Development Only (built 2016-07-07)
FF 24.8.0 and Chrominium 38.0.2125.101
There is custom validator attached to DataSource field 'dateTo'. This validator depends on 'validFrom' field.
Edit enabled ListGrid uses this DataSource:
Code:
import com.google.gwt.core.client.EntryPoint; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.DataSourceField; import com.smartgwt.client.data.Record; import com.smartgwt.client.data.fields.DataSourceDateField; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.types.FieldType; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Button; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.events.DrawEvent; import com.smartgwt.client.widgets.events.DrawHandler; import com.smartgwt.client.widgets.form.validator.CustomValidator; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.layout.VLayout; import java.util.Date; import java.util.HashMap; public class MainEntryPoint implements EntryPoint { public void onModuleLoad() { layout(); } private void layout() { DataSource projectDS = new DataSource(); projectDS.setClientOnly(true); DataSourceField idField = new DataSourceField(); idField.setType(FieldType.SEQUENCE); idField.setName("id"); idField.setPrimaryKey(true); idField.setHidden(true); DataSourceTextField codeField = new DataSourceTextField(); codeField.setName("code"); DataSourceDateField validFromField = new DataSourceDateField(); validFromField.setName("validFrom"); DataSourceDateField validToField = new DataSourceDateField(); validToField.setName("validTo"); DateRangeFieldValidator dateRangeFieldValidator = new DateRangeFieldValidator(); dateRangeFieldValidator.setDependentFields(new String[] {"validFrom"}); validToField.setValidators(dateRangeFieldValidator); projectDS.setFields(idField, codeField, validFromField, validToField); final ListGrid lg = new ListGrid(); lg.setDataSource(projectDS); lg.setCanEdit(true); lg.setAutoSaveEdits(false); lg.setWidth(300); lg.addDrawHandler(new DrawHandler() { public void onDraw(DrawEvent event) { HashMap map = new HashMap(); map.put("id", "0"); map.put("validFrom", new Date()); map.put("validTo", new Date()); //lg.startEditingNew(map); Record[] records = new Record[1] ; records[0] = new Record(map); lg.setData(records); } }); Button validateButton = new Button("Validate"); validateButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { lg.validateRow(0); } }); VLayout layout = new VLayout(); layout.addMember(lg); layout.addMember(validateButton); layout.draw(); } public class DateRangeFieldValidator extends CustomValidator { @Override protected boolean condition(Object value) { SC.logWarn("value=" + value); SC.logWarn("record=" + getRecord()); return true; } } }
Code:
14:06:17.422:MDN6:WARN:Log:value=Wed Jul 13 12:00:00 GMT+200 2016 14:06:17.423:MDN6:WARN:Log:record=com.smartgwt.client.data.Record@5 14:06:17.526:MUP5:WARN:Log:value=Wed Jul 13 12:00:00 GMT+200 2016 14:06:17.527:MUP5:WARN:Log:record=com.smartgwt.client.data.Record@6
Code:
14:43:23.937:MDN4:WARN:Log:value=null 14:43:23.938:MDN4:WARN:Log:record=com.smartgwt.client.data.Record@5 14:43:24.024:MUP2:WARN:Log:value=null 14:43:24.025:MUP2:WARN:Log:record=com.smartgwt.client.data.Record@6
Thanks,
MichalG
SmartClient Version: v11.0p_2016-07-07/LGPL Development Only (built 2016-07-07)
FF 24.8.0 and Chrominium 38.0.2125.101
Comment