在smartgwt中保存时,仅从动态表单发送更改的表单字段

时间:2014-04-25 07:42:26

标签: smartgwt

如何在smartgwt中仅从动态表单发送已更改/已编辑的表单字段。 例如;说动态表单有10个字段,我只编辑2个字段。然后,只有2个已编辑/更改的字段应该包含在保存表单的请求中。

如何在请求中仅发送已更改/已编辑的表单字段的任何想法。 请分享想法...

1 个答案:

答案 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

快照:

enter image description here


尝试使用DSRequest#setOldValues()

未测试的示例代码:

    DSRequest requestProperties=new DSRequest();
    requestProperties.setOldValues(oldValues);

    dynamicForm.saveData(new DSCallback() {

        @Override
        public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest) {
           ...                
        }
    }, requestProperties);