Как динамически изменить обязательное значение на ложное - PullRequest
0 голосов
/ 16 января 2011

Я новичок в калитке.Может кто-нибудь подскажите, пожалуйста, как динамически установить required на false?Вот мой код:

AjaxButton cancel=new AjaxButton("cancel"){
    public void onSubmit(AjaxRequestTarget target, Form form){
        passwrd.setRequired(false);
        nameField.setRequired(false);
        usernameField.setRequired(false);
        LecturerPage lecturer=new LecturerPage();
        setResponsePage(lecturer);
    }
};
addstud.add(cancel);

Tomcat говорит мне, что моя панель обратной связи оставлена ​​без обработки (моя кнопка ОК использует панель обратной связи).

1 Ответ

5 голосов
/ 16 января 2011

Метод onSubmit () выполняется только после , вся проверка выполняется, поэтому этот код даже не выполняется.

Но вам часто требуется выполнение некоторых действий без какой-либо проверки (например, кнопка «Отмена»). Вы можете сделать это, позвонив

cancel.setDefaultFormProcessing(false);

Таким образом, Wicket будет игнорировать проверку и обновление формы и сразу же выполнит метод onSubmit ().

Тогда ваш код будет выглядеть так:

AjaxButton cancel = new AjaxButton("cancel") {
    public void onSubmit(AjaxRequestTarget target, Form form){
        setResponsePage(new LecturerPage());
    }
};
cancel.setDefaultFormProcessing(false);

Жалоба Wicket на то, что обратная связь не обрабатывается, происходит потому, что, поскольку вы не вызвали setDefaultFormProcessing (false), он обработает форму, попытается проверить ее поля и найти ошибки. И в конце цикла запроса сообщения об ошибках нигде не отображались, поскольку вы не запрашивали повторную визуализацию панели обратной связи. Чтобы отобразить ошибки проверки в формах ajax, необходимо переопределить метод AjaxButton.onError ():

AjaxButton save = new AjaxButton("save") {
    public void onSubmit(AjaxRequestTarget target, Form form) {
        // whatever. won't run if any validation fails
    }
    public void onError(AjaxRequestTarget target, Form<?> form) {
        target.addComponent(feedbackPanel);
    }
};
...