2013-02-27 40 views
1

我有一个表单,其输入在某些组合中是必需的,也取决于哪个提交按钮被点击。检票口:有条件的验证器

E.g.字段A,B,和C,和提交按钮男,N。和有效的组合是 L:A + B N:A + B + C N:阿 Ñ:C

所以没有的输入是始终需要。

目前我解决它使用if(...)在onSubmit(),但我想知道:我可以移动这些检查到每个组件的验证器与回调(dis)批准某种组合?

更新:

_______________________ 

    User name: ______ 
    Password: ______ 

    [ Log in button ] 

    Email:  ______ 

    [ Register/reset password button ] 
_______________________ 

登录需要用户名和密码。 注册需要全部注册,在这种情况下,注册, 或只是邮件,或只是用户名,在这种情况下,它会发送传递重置质询邮件。

+1

难道你看看IFormValidator?它允许你指定依赖关系。但是它并不能解决验证因单击按钮而不同的问题。 – 2013-02-27 12:53:38

+0

我想重用现有的验证器,但根据这些条件“激活”它们。也许我可以将它们链接到我的impl后面。 – 2013-02-28 09:23:02

回答

1

我建议你添加AjaxFormComponentUpdatingBehaviors到您的组件,然后禁用当前组合通过

formComponent.setEnabled(false); 
target.add(formComponent); 

禁用的组件不会验证被认为是不应该提供所有组件。另一个好处是,用户总是立即对允许的组合有反馈。

+0

+1,但不幸的是,这不是我的情况的选项,请参阅更新的问题。 – 2013-03-05 19:04:29

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); 

让我知道如果你需要任何进一步的帮助,或者如果它不工作。干杯

+0

这看起来不错!要尝试 – 2013-03-06 18:49:25

+0

如果能解决这个问题,你能否将这个答案标记为已解决?也会帮助我。谢谢。 – Daniel 2013-03-25 08:35:36

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));