我有一个表单,其输入在某些组合中是必需的,也取决于单击了哪个提交按钮。
E.g。字段A,B和C,并提交按钮M,N。并且有效组合是 M:A + B. N:A + B + C. N:A N:C
因此,总是不需要任何输入。
目前我在onSubmit()
中使用if(...)来解决它,但我想知道:我是否可以将这些检查移动到具有回调的每个组件验证器,该回调将(dis)批准某些组合?
更新
_______________________
User name: ______
Password: ______
[ Log in button ]
Email: ______
[ Register / reset password button ]
_______________________
登录需要用户名和密码。 寄存器需要所有,在这种情况下它注册, 或者只是邮件,或者只是用户名,在这种情况下,它会发送一个密码重置挑战邮件。
答案 0 :(得分:2)
看看https://cwiki.apache.org/WICKET/conditional-validation.html处的示例,它几乎可以解决您的问题:
Button submit = new Button("submit") {
public void onSubmit() {
// handle form submission
}
}
form.add(submit);
TextField foo = new TextField("foo") {
public boolean isRequired() {
Form form = (Form) findParent(Form.class);
return form.getRootForm().findSubmittingButton() == button;
}
}
form.add(foo);
如果您需要任何进一步的帮助或者它不起作用,请告诉我。干杯
答案 1 :(得分:1)
我建议您将AjaxFormComponentUpdatingBehaviors添加到组件中,然后通过
禁用当前组合中不可用的所有组件formComponent.setEnabled(false);
target.add(formComponent);
验证时不会考虑禁用的组件。另一个好处是,用户始终可以立即获得有关允许组合的反馈。
答案 2 :(得分:0)
假设表格如此:
TextField user = new TextField();
user.setRequired(true);
TextField pass = new TextField();
TextField email = new TextField();
Button login = new Button();
Button register = new Button();
我会尝试创建一个FormValidator类,如下所示:
public class MyValidator extends AbstractFormValidator
{
private FormComponent[3] fields;
public MyValidtor(TextField field1, TextField, field2, Button button)
{
fields = {field1, field2, button };
}
//getDependentFormComponents returns fields;
public void validate(Form form)
{
if ( form.getRootForm().findSubmittingButton() == button)
{
//do field1 & field2 required checks here
}
}
}
然后只需将MyValidator
添加到表单
form.add(new MyValidator(user, pass, login));
form.add(new MyValidator(user, email, register));