0

我在理解我做错了什么时遇到了一些问题。

我做什么:

  • 在我的应用程序中覆盖 getHomePage()。我返回 MyStartPage.class。
  • MyStartPage 是 MySubPage 的子类。
  • MySubPage 是 MySuperPage 的子类。
  • 在 MySuperPage 中,我添加了一个面板。此面板有一个 TextField 和 WebMarkupContainer 以及一个打印文本字段的支持模型对象的 AjaxEventBehavior(onclick)。

当我启动服务器并浏览 localhost/MyApp 时会发生什么:

  • 即使当我单击 WebMarkupContainer 时用户输入不是,打印的模型对象也是空的。

当我启动服务器、浏览 localhost/MyApp、转到我的应用程序中的另一个页面然后返回 MyStartPage 时会发生什么:

  • 当我单击 WebMarkupContainer 时,打印的模型对象与用户输入相匹配。

当我执行以下操作时它也有效:

  • 在我的应用程序中覆盖 getHomePage() 并返回 MyLoginPage。MyLoginPage 包含 MySigninPanel。在 MySigninPanel 我覆盖 onSignInSucceeded() 像这样:

    @Override
    protected void onSignInSucceeded() {
         setResponsePage(new MyStartPage());
    }
    

当用户首先单击 WebMarkupContainer 时,有人可以阐明让我的 TextField 正常工作的正确方法吗?

提前致谢!

//编辑 :

这似乎只是 Firefox 中的一个问题,或者至少它在 Chrome IE9 和 IE9 中的 IE8 模式下运行良好。

4

2 回答 2

1

除非您使用单击事件提交表单,否则您的 TextField 的模型将不会使用用户输入的数据进行更新。您的 TextField 应该是该表单的子级。如果是,那么它的内容将被发送到服务器,转换为目标类型,并进行验证。成功后,您将能够查询模型并查看在您的页面上输入的数据。

为此,您应该使用 AjaxFormSubmitBehavior 而不是当前使用的 AjaxEventBehavior:

webMarkupContainer.add(new AjaxFormSubmitBehavior(form, "onclick") {

    @Override
    protected void onSubmit(AjaxRequestTarget target) {
        // You can now see what was entered in your TextField
        System.out.println(textField.getModelObject());
    }

    @Override
    protected void onError(AjaxRequestTarget target) {
        // An error occurred and you should provide some kind of feedback
    }
});
于 2012-07-15T18:29:50.637 回答
0

好吧,我有一个解决方案,尽管我不确定它为什么会起作用。我添加了

mountPage("invoice/overview", OverviewPage.class);

在我的 WebApplication 中,现在它可以在 FireFox 中运行(OverviewPage 在我最初的帖子中称为“MyStartPage”)。

这是 wicket.ajax.baseurl 和浏览器中键入的 url 在更改之前的样子,当时它不起作用:

baseUrl: wicket/bookmarkable/eyesys.web.invoice.overview.OverviewPage
浏览器网址:wicket/bookmarkable/eyesys.web.invoice.overview.OverviewPage?1

更改后:

baseUrl: invoice/overview
浏览器网址:invoice/overview?1

于 2012-07-22T08:23:50.933 回答