wicket中有一些组件似乎与表单相关联,但我无法让它们实际提交表单。
例如,我可以创建一个“submitlink”或按钮,这些组件提交:
return new SubmitLink(id, form) {
@Override
public void onSubmit() {
this.setResponsePage(pageClass);
}
};
上面有效。
我希望能够在变更时通过无线电选择进行提交。 E.g。
new OnChangeHandler() {
@Override
public void onChange(final Object sel) {
// On submission, submit back to form
setResponsePage(Page.class);
}
// MY CONTAINER IS NOT A FORM BUT A CHILD OF A FORM (E.g. FORM -> PANEL -> RADIOCHOICE
public RadioChoice addRadioGroup(final WebMarkupContainer container, final Object modelObject,
final String groupName, final String propFieldName, final String [] optionsArr, final OnChangeHandler handler) {
final RadioChoice radioGroupYesNo = new RadioChoice(groupName, new PropertyModel(modelObject, propFieldName), Arrays.asList(optionsArr)) {
@Override
public boolean wantOnSelectionChangedNotifications() {
return (handler != null); /* When the handler is not null, enable on change */
}
@Override
public void onSelectionChanged(Object newSel) {
if (handler != null) {
handler.onChange(newSel);
} else {
super.onSelectionChanged(newSel);
}
}
};
container.add(radioGroupYesNo);
return radioGroupYesNo;
}
使用上面显示的代码,页面会刷新,但我想提交表单并进行页面刷新。
我没有看到我可以将表格与RadioChoice联系起来?
答案 0 :(得分:2)
您的问题不是表单与RadioChoice的连接,因为表单组件的大多数表单处理内容在组件层次结构中搜索包含表单,即使它不是直接父表单也会找到它。
但是RadioChoice并不自然地提交表格,而且客户端可能需要做一些事情才能进行实际的表单提交。
使用wantOnSelectionChangedNotifications只需为执行Ajax请求启用javascript,以通知服务器无线电选择的更改。此Ajax不包括表单提交。
您可以将AjaxFormSubmitBehavior的子类附加到您的RadioChoice并获得实际的表单提交,但我没有尝试过,也不知道它是否会起作用。
您也可以尝试附加一个AjaxFormComponentUpdatingBehavior,然后仅刷新受this example code影响的页面部分(对于DropDownChoice,但类似的策略可以用于RadioChoice)。如果问题是您正在丢失其他输入元素的更改(由于缺少提交而未知服务器端),这可能会导致您解决根问题。