如何在smartgwt中仅从动态表单发送已更改/已编辑的表单字段。 例如;说动态表单有10个字段,我只编辑2个字段。然后,只有2个已编辑/更改的字段应该包含在保存表单的请求中。
如何在请求中仅发送已更改/已编辑的表单字段的任何想法。 请分享想法...
答案 0 :(得分:0)
表单的当前值可以DynamicForm#getValues()访问。
同时查看DynamicForm#rememberValues(),DynamicForm#setValues()和DynamicForm#resetValues()。
尝试使用此示例代码获取已编辑的值。
public void onModuleLoad() {
VLayout vLayout = new VLayout();
ComboBoxItem comboBoxItem = new ComboBoxItem();
comboBoxItem.setShowTitle(false);
comboBoxItem.setValueMap("mouse", "cat", "cow", "dog");
TextItem textItem = new TextItem();
textItem.setShowTitle(false);
CheckboxItem checkboxItem = new CheckboxItem();
checkboxItem.setShowTitle(false);
checkboxItem.setTitle("");
final DynamicForm dynamicForm = new DynamicForm();
dynamicForm.setItems(comboBoxItem, checkboxItem, textItem);
vLayout.addMember(dynamicForm);
// default values
textItem.setValue("abc");
comboBoxItem.setValue("cat");
checkboxItem.setValue(true);
// Remember values
dynamicForm.rememberValues();
// store default values
final Map<?, ?> defaultValues = dynamicForm.getValues();
Button button = new Button("check");
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Map<?, ?> newValues = dynamicForm.getValues();
for (Object key : defaultValues.keySet()) {
if (!defaultValues.get(key).equals(newValues.get(key))) {
System.out.println(key + " - old value: " + defaultValues.get(key)
+ " - new value: " + newValues.get(key));
}
}
}
});
vLayout.addMember(button);
RootPanel.get().add(vLayout);
}
输出:
isc_TextItem_0 - old value: abc - new value: xyz
isc_ComboBoxItem_0 - old value: cat - new value: cow
isc_CheckboxItem_0 - old value: true - new value: false
快照:
未测试的示例代码:
DSRequest requestProperties=new DSRequest();
requestProperties.setOldValues(oldValues);
dynamicForm.saveData(new DSCallback() {
@Override
public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest) {
...
}
}, requestProperties);