我在按钮的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方法时,会发生同样的情况......
答案 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工作正常。
答案 2 :(得分:0)
我找到了另一种方法,让其他人偶然发现这个问题。
我有一个我继承的基类,然后我将反馈消息打印出来作为基类的一部分..我也遇到了这个问题,并且我的基类中只有一个方法返回一个自己的实例(返回此),然后我只是通过这个方法访问info方法...所以,getMethod()。info(“some message”)..它对我有用。我的feedbackPanel也设置在基类中。
所以我想你可以做同样的事情。只需访问你想要反馈消息的页面实例。