如何动态更改所需的false

E S*_*ler 0 java wicket

我是Wicket的新手.有人可以告诉我如何动态设置requiredfalse?这是我的代码:

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);
Run Code Online (Sandbox Code Playgroud)

Tomcat告诉我我的反馈面板没有被渲染(我的OK按钮使用反馈面板).

tet*_*suo 5

onSubmit()方法仅所有验证完成执行,因此甚至不执行此代码.

但是,您经常需要执行某些操作而不进行任何验证(例如"取消"按钮).你可以做那个电话

cancel.setDefaultFormProcessing(false);
Run Code Online (Sandbox Code Playgroud)

这样,Wicket将忽略验证和表单更新,并立即执行onSubmit()方法.

然后,您的代码将如下所示:

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

Wicket抱怨没有呈现反馈,因为你没有调用setDefaultFormProcessing(false),它将处理表单,尝试验证其字段,并发现错误.并且,在请求周期结束时,错误消息将不会显示在任何位置,因为您没有请求重新呈现FeedbackPanel.要在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);
    }
};
Run Code Online (Sandbox Code Playgroud)