检票口问题字段值从未使用过

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);
        }