对于Wicket来说是新手,但是具有非常基本的Java。我不了解如何在AjaxButton函数中使用过“结果”,而不用它
该快速修复程序说提供了一个吸气剂和塞特气,我做了(现在已经删除了),但是当我单击“确定”按钮时仍然没有任何反应
CalcPage.java:
public class CalcPage extends WebPage{
private int num;
private int result; // error:The value of the field CalcPage.result is not used
private Label r;
public CalcPage() {
Form<Void> f = new Form<Void>("f");
add(f);
f.add(new TextField<Integer>("num", new PropertyModel<Integer>(this, "num")));
AjaxButton ok = new AjaxButton("ok") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
result = 2 * num;
target.add(r);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
}
};
f.add(ok);
r = new Label("r", new PropertyModel<Integer>(this, "result"));
add(r);
}
}
CalcPage.html
<html xmlns:wicket="http://wicket.apache.org">
<head>
<meta charset="utf-8" />
<title>Apache Wicket Quickstart</title>
<link href='https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:regular,bold' rel='stylesheet' type='text/css' />
<link rel="stylesheet" href="style.css" type="text/css" media="screen" title="Stylesheet" />
</head>
<body>
<form wicket:id="f">
<input type="text" wicket:id="num"/>
<input type="submit" value="OK" wicket:id="ok"/>
</form>
Result: <span wicket:id="r"></span>
</body>
</html>
希望(根据《使用Wicket享受Web开发》一书)将输入翻倍,但是当我单击OK时,什么也没发生。
在代码中我也遇到了@Override的编译错误,一旦将其删除,我就可以编译并加载网页。他们有关系吗?
Wicket Ajax调试窗口信息: 信息:焦点已从
移除信息:重点放在
信息:焦点从
移开了信息:重点放在wicketDebugLink上
信息:焦点已从wicketDebugLink中移除
INFO:重点放在ok2上
INFO:收到ajax响应(69个字符)
INFO:
INFO:响应已成功处理。
信息:不需要/不允许重新聚焦上一个焦点组件
ETA,我从私有更改为公开,该错误消失了,但是单击“确定”仍然不起作用,并且出现了新错误: new AjaxButton(){}类型的onSubmit(AjaxRequestTarget,Form)方法永远不会在本地使用
答案 0 :(得分:2)
如果要通过Ajax更新组件,则需要调用r.setOutputMarkupId(true)
。
1)如果javac(或您的IDE)说@Override
没有覆盖任何内容,则很可能您在某个地方有错字,并且需要对其进行修复,即从super正确覆盖该方法
2)永远不要将#onError()
留空。至少要在其中添加一些基本日志记录,以通知您存在验证错误。也许根本没有调用#onSubmit()
。最好的办法是在页面中添加一个FeedbackPanel,然后您应该在#onError()
-target.add(feedbackPanel)
3)检查浏览器的开发工具控制台是否存在JavaScript错误。我希望Wicket抱怨因为缺少rXY
XY
(其中r.setOutputMarkupId(true)
是数字)的HTML元素。
答案 1 :(得分:0)
检票口的版本8没有“ form”参数,因此可以将其删除:
新代码
AjaxButton ok = new AjaxButton("ok") {
@Override
protected void onSubmit(AjaxRequestTarget target) {
result= 2*num;
target.add(r);
}