是否可以在Wicket中嵌套彼此独立的表单?我想要一个带有提交按钮和取消按钮的表单。两个按钮都应该将用户引导到同一页面(让我们称之为Foo)。提交按钮应首先向服务器发送一些信息;取消按钮应该什么都不做。
这是我现有代码的真正简化版本:
Form form = new Form() {
public void onSubmit()
{
PageParameters params = new PageParameters();
params.put("DocumentID", docID);
setResponsePage(Foo.class, params);
}
};
DropDownChoice<String> ddc = new DropDownChoice<String>("name", new PropertyModel<String>(this, "nameSelection"), names);
ddc.setRequired(true);
final Button submitButton = new Button("Submit") {
public void onSubmit() { doSubmitStuff(true); }
};
final Button cancelButton = new Button("Cancel") {
public void onSubmit() { doSubmitStuff(false); }
};
form.add(ddc);
form.add(submitButton);
form.add(cancelButton);
form.add(new FeedbackPanel("validationMessages"));
问题是,我刚刚添加了一个验证器,即使我按下取消按钮也会触发,因为取消按钮与其他所有内容都附加在同一表格上。如果取消按钮是单独的形式,则可以避免这种情况。据我所知,我不能创建一个单独的表单,因为 - 由于HTML的结构 - 单独的表单将在组件层次结构中的现有表单下。
我能否以不同的方式将表单分开?或者我可以使用其他解决方案吗?
编辑:
回应Don Roby的评论,这与我在尝试setDefaultFormProcessing()
时的代码看起来更接近:
Form<Object> theForm = new Form<Object>("theForm") {
public void onSubmit()
{
PageParameters params = new PageParameters();
params.put("DocumentID", docID);
setResponsePage(Foo.class, params);
}
};
final CheckBox checkbox = new CheckBox("checkbox", new PropertyModel<Boolean>(this, "something"));
checkbox.add(new PermissionsValidator());
theForm.add(checkbox);
final Button saveButton = new Button("Save") {
public void onSubmit()
{ someMethod(true); }
};
final Button cancelButton = new Button("Cancel") {
public void onSubmit()
{ someMethod(false); }
};
cancelButton.setDefaultFormProcessing(false);
theForm.add(saveButton);
theForm.add(cancelButton);
theForm.add(new FeedbackPanel("validationMessages"));
答案 0 :(得分:4)
有一个更简单的解决方案:使用setDefaultFormProcessing
作为参数调用取消按钮上的false
方法:
cancelButton.setDefaultFormProcessing(false);
这样,单击取消按钮将绕过表单验证(和模型更新),直接调用onSubmit
函数。
答案 1 :(得分:2)
可以在wicket中“嵌套”形式。
参见this wiki entry 关于它是如何工作的一些注释和this wiki entry关于它如何与验证相互作用的注释。
但是对于你所追求的,Jawher的答案应该有效并且更加简单。
请查看此example code以获取有关使其正常工作的提示。
我想知道你是否在这篇文章中简化了你的代码。你能制作一个足够小的样本来发帖吗?