0

我在按钮的 onSubmit 中有一些逻辑(在表单中),这可能会失败,所以我想使用error(myMessage). 但它不起作用,而且看起来很正常:

添加了反馈面板,但未显示所有消息

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

页面上没有使用 ajax。我正在使用检票口 1.5.6

编辑:

我的页面.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");
    }
}

我的页面.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 中的方法时,也会发生同样的情况......

4

3 回答 3

2

您需要将反馈面板添加到您的页面。反馈消息在组件层次结构中“冒泡”。最简单的方法是在您的页面上设置一个反馈面板。

但是,您也可以在报告错误的 FormComponent 附近显示错误。请参阅此 pdf 以获得灵感可能的实现

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

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(我忽略了那个细节)。切换回(正常)表单,消息应正确显示。

于 2012-05-16T18:08:50.393 回答
0

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

编辑: 1.5.5 版运行良好。

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

于 2012-05-23T11:15:18.713 回答
0

我为遇到此问题的其他人找到了另一种方法..

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

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

于 2013-11-12T18:52:04.347 回答