如何动态更改所需的false

时间:2011-01-16 11:22:31

标签: java wicket

我是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);

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

1 个答案:

答案 0 :(得分:5)

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),它会处理表单,尝试验证其字段,并发现错误。并且,在请求周期结束时,错误消息将不会显示在任何位置,因为您没有请求重新呈现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);
    }
};