检票口问题字段值从未使用过
Wicket issue field value never used
Wicket 很新,但有非常基本的 Java。我不明白为什么 "result" 没有被使用,因为我在 AjaxButton 函数
中使用过它
quickfix 说要提供 getter 和 setter,我做了(现在已经删除)但是当我点击确定按钮时仍然没有任何反应
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>
希望(根据 Enjoying web development with Wicket 一书)将输入加倍,但是当我单击“确定”时没有任何反应。
同样在代码中我遇到了@Override 的编译错误,一旦删除它我就可以编译和加载网页。他们有关系吗??
检票口 Ajax 调试 window 信息:
信息:焦点已从
移除
信息:焦点设置在
信息:焦点已从
移除
信息:焦点设置在 wicketDebugLink
信息:焦点已从 wicketDebugLink 中移除
信息:焦点设置在 ok2
信息:已收到 ajax 响应(69 个字符)
信息:
信息:响应处理成功。
信息:重新聚焦最后聚焦的组件不是 needed/allowed
ETA 我从私有更改为 public 并且该错误消失了,但单击“确定”仍然无效,并且出现了新错误:
new AjaxButton(){} 类型的 onSubmit(AjaxRequestTarget, Form) 方法从未在本地使用
如果您想通过 Ajax 更新组件,您需要调用 r.setOutputMarkupId(true)
。
1) 如果 javac(或你的 IDE)说 @Override
没有覆盖任何东西那么很可能你在某处有错字并且你需要修复它,即正确覆盖方法来自超级
2) 切勿将 #onError()
留空。至少在其中添加一些基本日志记录以通知您存在验证错误。也许 #onSubmit()
根本没有被调用。最好是在页面中有一个 FeedbackPanel,您应该在 #onError()
- target.add(feedbackPanel)
中更新它
3) 检查浏览器的开发工具控制台是否有 JavaScript 错误。我希望 Wicket 抱怨它找不到 ID 为 rXY
的 HTML 元素(其中 XY
是一个数字),因为缺少 r.setOutputMarkupId(true)
wicket 版本 8 没有 "form" 参数,因此可以删除它:
新代码
AjaxButton ok = new AjaxButton("ok") {
@Override
protected void onSubmit(AjaxRequestTarget target) {
result= 2*num;
target.add(r);
}
Wicket 很新,但有非常基本的 Java。我不明白为什么 "result" 没有被使用,因为我在 AjaxButton 函数
中使用过它quickfix 说要提供 getter 和 setter,我做了(现在已经删除)但是当我点击确定按钮时仍然没有任何反应
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>
希望(根据 Enjoying web development with Wicket 一书)将输入加倍,但是当我单击“确定”时没有任何反应。
同样在代码中我遇到了@Override 的编译错误,一旦删除它我就可以编译和加载网页。他们有关系吗??
检票口 Ajax 调试 window 信息: 信息:焦点已从
移除信息:焦点设置在
信息:焦点已从
移除信息:焦点设置在 wicketDebugLink
信息:焦点已从 wicketDebugLink 中移除
信息:焦点设置在 ok2
信息:已收到 ajax 响应(69 个字符)
信息:
信息:响应处理成功。
信息:重新聚焦最后聚焦的组件不是 needed/allowed
ETA 我从私有更改为 public 并且该错误消失了,但单击“确定”仍然无效,并且出现了新错误: new AjaxButton(){} 类型的 onSubmit(AjaxRequestTarget, Form) 方法从未在本地使用
如果您想通过 Ajax 更新组件,您需要调用 r.setOutputMarkupId(true)
。
1) 如果 javac(或你的 IDE)说 @Override
没有覆盖任何东西那么很可能你在某处有错字并且你需要修复它,即正确覆盖方法来自超级
2) 切勿将 #onError()
留空。至少在其中添加一些基本日志记录以通知您存在验证错误。也许 #onSubmit()
根本没有被调用。最好是在页面中有一个 FeedbackPanel,您应该在 #onError()
- target.add(feedbackPanel)
3) 检查浏览器的开发工具控制台是否有 JavaScript 错误。我希望 Wicket 抱怨它找不到 ID 为 rXY
的 HTML 元素(其中 XY
是一个数字),因为缺少 r.setOutputMarkupId(true)
wicket 版本 8 没有 "form" 参数,因此可以删除它:
新代码
AjaxButton ok = new AjaxButton("ok") {
@Override
protected void onSubmit(AjaxRequestTarget target) {
result= 2*num;
target.add(r);
}