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 オブジェクト「Invoice」の値を設定し、onValidateModelObjectsを使用して改札の検証をオーバーライドし、独自の検証を使用します...検証...

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 System に適用することです。しかし...

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

また、IFormValidatorの実装を定義し、 Form.add()メソッドを使用してフォームにアタッチして、検証を実行できることにも注意してください。

于 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 に答える