1

我有一个表单,在某些组合中需要输入,并且还取决于单击了哪个提交按钮。

例如字段 A、B 和 C,以及提交按钮 M、N。有效组合为 M:A + B N:A + B + C N:A N:C

所以不需要任何输入。

目前我使用 if( ... ) in 解决它onSubmit(),但我想知道:我可以将这些检查移动到带有回调的每个组件验证器,该回调将(拒绝)批准某些组合?

更新:

_______________________

  User name:  ______
  Password:   ______

  [ Log in button ]

  Email:      ______

  [ Register / reset password button ]
_______________________

登录需要用户名和密码。注册需要所有,在这种情况下它会注册,或者只是邮件,或者只是用户名,在这种情况下它会发送一个通过重置挑战邮件。

4

3 回答 3

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

如果您需要任何进一步的帮助或者它不起作用,请告诉我。干杯

于 2013-03-06T11:46:06.123 回答
1

我建议您将 AjaxFormComponentUpdatingBehaviors 添加到您的组件中,然后通过

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

在验证中将不考虑禁用的组件。另一个好处是,用户总是可以立即获得有关允许组合的反馈。

于 2013-03-05T08:50:04.837 回答
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));
于 2013-03-07T00:24:28.923 回答