【问题标题】:Handle feedback-Messages with a custom validation framework/object in apache wicket使用 apache wicket 中的自定义验证框架/对象处理反馈消息
【发布时间】:2012-11-04 01:26:30
【问题描述】:

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

例如 我有我的检票表格

<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...

...
}

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

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

我该怎么做?

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

【问题讨论】:

    标签: apache validation error-handling wicket


    【解决方案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 的实现并将其附加到表单中,以便为您执行验证。

    【讨论】:

    • Form.error() 究竟是如何工作的?假设我有 2 个组件 = 2 个文本字段.... 1.Textfield 称为 price 和 2.Textfield 称为接收者....我将它们添加到我的表单中....现在如何获取文本字段价格并设置 errorMessage价格保存在 msg 中的消息.....你写了 error(msg,null);但是这将用于哪个组件?
    • 我在我的 ValidateModelObjects() 方法中需要这样的东西: if(component.name = price) then set error to msg. if(component.name = recipient) 然后将错误设置为 msg。等等……
    • Form.error() 注册一个关于错误的字符串,以在 FeedbackPanel 中显示给用户。在 Form.onSubmit() 中,您可以检查 Form.hasErrors() 以检查是否已注册任何错误。
    • 我差不多了...但是如何在组件本身注册错误...因为我在组件上添加了红色边框,并且只有在组件抛出时才会突出显示一个错误...所以我也需要在组件上注册错误...
    • 谢谢戴夫!也为我工作!
    【解决方案2】:

    我得到它使用以下代码:

    ...
    //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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多