onSubmit出错,反馈未呈现

时间:2012-05-14 05:28:25

标签: wicket-1.5

我在按钮的onSubmit中有一些逻辑(在Form中),这可能会失败,所以我想用error(myMessage)显示一条消息。但它不起作用,似乎这是正常的:

Feedback panel added but does not show all messages

是否有可能呈现onSubmit中报告错误的反馈面板?

页面上没有使用ajax。我正在使用wicket 1.5.6

编辑:

MyPage.java

public class MyPage extends WebPage {

    private static final Logger logger = Logger.getLogger(MyPage.class);
    private static final long serialVersionUID = -8874964120018036584L;

    public MyPage(PageParameters parameters) {
        super(parameters);
        logger.debug("Creating new login page");

        add(new MyLoginForm("loginForm"));
    }
}

MyLoginForm.java

public class MyLoginForm extends StatelessForm<Void> {

    private static final Logger logger = Logger.getLogger(MyLoginForm.class);
    private static final long serialVersionUID = -8694389090804630170L;
    private MyUser user = new MyUser();

    public MyLoginForm(String id) {
        super(id);
        setOutputMarkupId(true);
        logger.debug("Creating new stateless login form");

        add(new RequiredTextField<String>("login", new PropertyModel<String>(user, "login")));
        add(new PasswordTextField("password", new PropertyModel<String>(user, "password")));
        add(new Button("submit"));
        add(new FeedbackPanel("feedback"));
    }

    @Override
    public void onSubmit() {
        info("test info");
    }
}

的mypage.html

<body>
    <form wicket:id="loginForm">
        <fieldset>
            <legend><wicket:message key="form.login.legend"/></legend>
            <input type="text" wicket:id="login" />
            <input type="password" wicket:id="password" />
            <input type="submit" wicket:id="submit" />
            <span wicket:id="feedback"></span>
        </fieldset>
    </form>
</body>

catalina.out中

16 May 2012 15:24:20:860 WARN  [http-8080-2] [WebSession:135] Component-targetted feedback message was left unrendered. This could be because you are missing a FeedbackPanel on the page.  Message: [FeedbackMessage message = "test info", reporter = loginForm, level = INFO]

当我尝试覆盖Button中的onSubmit方法而不是MyLoginForm中的onSubmit方法时,会发生同样的情况......

3 个答案:

答案 0 :(得分:2)

您需要向页面添加FeedbackPanel。反馈消息'冒泡'在组件hierarchie中。最简单的方法是在您的页面上放置一个反馈面板。

但是,您还可以在报告错误的FormComponent附近显示错误。请参阅this pdf for inspiration for a possible implementation

编辑:我只是使用wicket快速入门构建一个非常简单的测试。更改了HomePage如下,它工作(我看到所有错误/信息消息)

HTML:

<form wicket:id="form">
            <div wicket:id="feedback"></div>
            <input wicket:id="submit" type="button" value="submit">

</form>

爪哇:

Form<Void> form = new Form<Void>("form") {
        @Override
        protected void onSubmit() {
            super.onSubmit();
            error("test error from form");
            error("test info from form");
        }
    };
    add(form);
    form.add(new FeedbackPanel("feedback"));
    form.add(new SubmitLink("submit") {
        @Override
        public void onSubmit() {
            super.onSubmit();
            error("an error occurred in button submit");
            info("test info from the button");
        }
    });

编辑2:事实证明,使用了StatelessForm(我忽略了那个细节)。切换回(普通)表格,消息应正确显示。

答案 1 :(得分:0)

我已经检查了两次,Wicket 1.5.6 FeedbackPanel(和我有问题的SignInForm)工作比1.5.4差 我不知道,这种行为的背景是什么。

编辑:版本1.5.5工作正常。

EDIT2:https://issues.apache.org/jira/browse/WICKET-4536

答案 2 :(得分:0)

我找到了另一种方法,让其他人偶然发现这个问题。

我有一个我继承的基类,然后我将反馈消息打印出来作为基类的一部分..我也遇到了这个问题,并且我的基类中只有一个方法返回一个自己的实例(返回此),然后我只是通过这个方法访问info方法...所以,getMethod()。info(“some message”)..它对我有用。我的feedbackPanel也设置在基类中。

所以我想你可以做同样的事情。只需访问你想要反馈消息的页面实例。