Hi Isomorphic,
please see this builtInDS-based testcase using 5.1d SNAPSHOT_v10.1d_2015-10-30 (I have it in my application using 5.0p as well):
BuiltInDS.java:
employees.ds.xml:
FalseValidator.java:
When you start a new row, it will always have errors (see FalseValidator). The displayed value for the unchanged default mentor of "Ralph Brogan"(=192) will change to "192". This does not happen if I select an entry from the list. The selected name then stays also when the validation error is displayed. Also when I change away from "Ralph Brogan" and then back to "Ralph Brogan", it works. Only an unchanged default value triggers the bug.
Best regards
Blama
please see this builtInDS-based testcase using 5.1d SNAPSHOT_v10.1d_2015-10-30 (I have it in my application using 5.0p as well):
BuiltInDS.java:
Code:
package com.smartgwt.sample.client;
import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.core.KeyIdentifier;
import com.smartgwt.client.data.AdvancedCriteria;
import com.smartgwt.client.data.Criterion;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.types.OperatorId;
import com.smartgwt.client.util.Page;
import com.smartgwt.client.util.PageKeyHandler;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.SpinnerItem;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.layout.VLayout;
public class BuiltInDS implements EntryPoint {
private VLayout mainLayout;
private IButton recreateBtn;
public void onModuleLoad() {
KeyIdentifier debugKey = new KeyIdentifier();
debugKey.setCtrlKey(true);
debugKey.setKeyName("D");
Page.registerKey(debugKey, new PageKeyHandler() {
public void execute(String keyName) {
SC.showConsole();
}
});
mainLayout = new VLayout(20);
mainLayout.setWidth100();
mainLayout.setHeight100();
recreateBtn = new IButton("Recreate");
recreateBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
recreate();
}
});
mainLayout.addMember(recreateBtn);
recreate();
mainLayout.draw();
}
private void recreate() {
Window w = new Window();
w.setWidth("95%");
w.setHeight("95%");
w.setMembersMargin(0);
w.setModalMaskOpacity(70);
w.setTitle("Import data");
w.setShowMinimizeButton(false);
w.setIsModal(true);
w.setShowModalMask(true);
w.centerInPage();
Label label = new Label("Try to create a new entry. Save will fail. See how the manager field switches to a integer value afterwards.");
w.addItem(label);
{
final ListGrid testGrid = new ListGrid(DataSource.get("employees"));
testGrid.setCanEdit(true);
IButton startEditingNew = new IButton("Start editing new");
startEditingNew.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
testGrid.startEditingNew();
}
});
w.addItem(startEditingNew);
ListGridField idLGF = new ListGridField("EmployeeId");
ListGridField nameLGF = new ListGridField("Name");
ListGridField managerLGF = new ListGridField("ReportsTo");
SelectItem managerEditItem = new SelectItem("ReportsTo");
managerEditItem.setOptionDataSource(DataSource.get("employees"));
managerEditItem.setValueField("EmployeeId");
managerEditItem.setDisplayField("Name");
managerLGF.setEditorProperties(managerEditItem);
// 192 is employee "Ralph Brogan"
managerLGF.setDefaultValue(192);
// Following row would not be correct. Value must be a whole number.
// managerLGF.setDefaultValue("Ralph Brogan");
ListGridField jobLGF = new ListGridField("Job");
ListGridField genderLGF = new ListGridField("Gender");
ListGridField salaryLGF = new ListGridField("Salary");
salaryLGF.setEditorProperties(new SpinnerItem());
testGrid.setFields(idLGF, managerLGF, nameLGF, genderLGF, jobLGF, salaryLGF);
AdvancedCriteria ac = new AdvancedCriteria(new Criterion("Name", OperatorId.STARTS_WITH, "A"));
testGrid.fetchData(ac);
w.addItem(testGrid);
}
w.show();
}
}
Code:
<DataSource ID="employees" serverType="sql" tableName="employeeTable" recordName="employee" testFileName="/examples/shared/ds/test_data/employees.data.xml"
titleField="Name">
<fields>
<field name="userOrder" title="userOrder" type="integer" canEdit="false" hidden="true" />
<field name="Name" title="Name" type="text" length="128">
<validators>
<validator type="serverCustom" errorMessage="$errorMessage">
<serverObject lookupStyle="new" className="com.smartgwt.sample.server.listener.FalseValidator" />
</validator>
</validators>
</field>
<field name="EmployeeId" title="Employee ID" type="integer" primaryKey="true" required="true" />
<field name="ReportsTo" displayField="ReportsToName" title="Manager" type="integer" required="true" foreignKey="employees.EmployeeId" />
<field name="ReportsToName" includeFrom="employees.Name" includeVia="ReportsTo" />
<field name="Job" title="Title" type="text" length="128" />
<field name="Email" title="Email" type="text" length="128" />
<field name="EmployeeType" title="Employee Type" type="text" length="40" />
<field name="EmployeeStatus" title="Status" type="text" length="40" />
<field name="Salary" title="Salary" type="float" />
<field name="OrgUnit" title="Org Unit" type="text" length="128" />
<field name="Gender" title="Gender" type="text" length="7">
<valueMap>
<value>male</value>
<value>female</value>
</valueMap>
</field>
<field name="MaritalStatus" title="Marital Status" type="text" length="10">
<valueMap>
<value>married</value>
<value>single</value>
</valueMap>
</field>
</fields>
</DataSource>
Code:
package com.smartgwt.sample.server.listener;
import java.util.Map;
import com.isomorphic.datasource.DataSource;
import com.isomorphic.datasource.Validator;
import com.isomorphic.log.Logger;
public class FalseValidator {
public boolean condition(Object value, Validator validator, String fieldName, @SuppressWarnings("rawtypes") Map record, DataSource ds)
throws Exception {
Logger log = new Logger("com.isomorphic." + FalseValidator.class.getName());
log.info("Called for field \"" + fieldName + "\", value \"" + (value == null ? "NULL" : value.toString()) + "\"");
validator.addErrorMessageVariable("errorMessage", "FalseValidator");
return false;
}
}
Best regards
Blama
Comment