我是Wicket的新手.有人可以告诉我如何动态设置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);
Run Code Online (Sandbox Code Playgroud)
Tomcat告诉我我的反馈面板没有被渲染(我的OK按钮使用反馈面板).
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)