0

我正在使用自己的验证,但是应该在检票口中突出显示或自定义表单的视图(例如,如果组件无效)...

所以例如我有我的检票表格

<form wicket:id="inputForm">
         <p>
             <label for="Recipient">Recipient</label>
             <input wicket:id="Recipient" id="Recipient" type="text" size="40"/>
         </p>
         <p>
             <label for="Details">Details</label>
             <input wicket:id="Details" id="Details" type="text" size="40"/>
         </p>
</form>

然后我有我的 Form.java:在这里我设置我的 Java 对象“发票”的值并使用onValidateModelObjects来覆盖检票口验证并使用我自己的验证......这个方法只是调用一个简单的自己创建的 ValidatorObject 来处理验证...

public InvoiceForm() {
    ...

    Form<Invoice> form = new Form("inputForm", formModel) {
        /*
         * Validation takes place here
         */
        @Override
        public void onValidateModelObjects() {
            ValidationProcess vp = new ValidationProcess();
            vp.validate("Rules.js", r);
            msg = "";
            if (vp.getConstraintViolations().size() > 0) {

                for (String s : vp.getConstraintViolations()) {
                    msg = msg + s;
                }
            } else {
                msg = "no errors.";
            }
        }
    };

    //adding Textfields to the Form etc...

...
}

我需要什么:上面你可以看到我的错误消息将被保存到 msg 字符串中!现在我想要的是 Wicket 获取此字符串并将其应用于 Wicket FeedBackMessage 系统,或者......

  1. 我需要获取此刻将要渲染的组件...
  2. 我必须将此组件的错误消息设置为我的组件...

我怎样才能做到这一点?

我想我需要重写一些方法,但我不知道哪些方法和在哪里......

4

2 回答 2

1

有一个特殊的组件,FeedbackPanel,它在页面上显示验证和提交错误。因此,将 FeedbackPanel 添加到带有表单的页面。

然后Form.error()方法为该组件注册一条错误反馈消息,以显示在 FeedbackPanel 上。例如,

    @Override
    public void onValidateModelObjects() {
        ValidationProcess vp = new ValidationProcess();
        vp.validate("Rules.js", r);
        if (vp.getConstraintViolations().size() > 0) {
            msg = "";
            for (String s : vp.getConstraintViolations()) {
                msg = msg + s;
            }
        } else {
            msg = "no errors.";
        }
        error(msg, null);
    }

另请注意,您可以使用Form.add()方法定义IFormValidator的实现并将其附加到表单以执行验证。

于 2012-11-04T10:25:50.787 回答
0

我让它使用以下代码:

...
//Textfields or Form Components GO HERE...

        @Override
        public void onValidateModelObjects() {
            ValidationProcess vp = new ValidationProcess();
            vp.validate("Rules.js", r);
            msg = "";
            if (vp.getConstraintViolations().size() > 0) {

                for (String s : vp.getConstraintViolations()) {
                    if (s.contains(";")) {
                        String[] splitted = s.split(";");
                        String elementname = splitted[0];
                        String errorMessage = splitted[1];

                        if (elementname.equals("price")) {
                            //SET Error of Component 
                            price.error(elementname + " " + errorMessage + ". ");
                          } else if (elementname.equals("recipient")) {
                            recipient.error(elementname + " " + errorMessage);
                        }
                    }
                }
            }
        }

//Rest of the Code
于 2012-11-05T01:20:02.197 回答