模型未在Wicket的主页初始加载时更新

时间:2012-07-15 12:57:44

标签: java firefox wicket page-lifecycle

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

我做了什么:

  • 在我的应用程序中覆盖getHomePage()。我返回MyStartPage.class。
  • MyStartPage是MySubPage的子类。
  • MySubPage是MySuperPage的子类。
  • 在MySuperPage中我添加了一个Panel。此Panel有一个TextField和WebMarkupContainer,它带有一个AjaxEventBehavior(onclick),用于打印文本字段的后备modelObject。

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

  • 即使用户输入不是我单击我的WebMarkupContainer时,打印的modelObject也为null。

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

  • 当我单击我的WebMarkupContainer时,打印的modelObject与用户输入匹配。

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

  • 在我的应用程序中覆盖getHomePage()并返回MyLoginPage。 MyLoginPage包含MySigninPanel。在MySigninPanel中,我重写onSignInSucceeded(),如下所示:

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

当用户第一次点击WebMarkupContainer时,有人可以了解一下让TextField正常工作的正确方法吗?

提前致谢!

//编辑:

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

2 个答案:

答案 0 :(得分:1)

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

为此,您应该使用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
    }
});

答案 1 :(得分:0)

嗯,我有一个解决方案,虽然我不确定为什么它的工作原理。我添加了

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

在我的WebApplication中,现在它在FireFox中工作(在我的初始帖子中,OverviewPage被称为'MyStartPage')。

以下是wicket.ajax.baseurl和浏览器中输入的网址在更改之前的样子,当它不起作用时:

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

改变之后:

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