0

我知道这个(另一个)网站上有很多类似的问题,但没有一个能帮助我解决我的问题。我有 2 个检票口状态页面。页面安装如下:

mountPage(firstPath, firstPage.class);
mountPage(secondPath, secondPage.class);

第一次加载页面 firstPage 时,它​​会使用默认构造函数加载,并且 url 看起来像所需的那样。一旦 firstPage 中的表单被提交,我将转发到有状态页面 secondPage,如下所示:

Page secondPage = new secondPage(arg1, arg2);
RequestCycle().setResponsePage(secondPage);

尽管安装了第二个页面,但生成的页面 (secondPage) 使用以下 url 呈现:

context?21-1.IFormSubmitListener-componentName-childComponentName-childComponentName-someForm

我想要的是使用我定义的安装路径呈现的 secondPage。我知道这是一个有状态的页面,为了让 wicket 加载它的确切实例,url 必须是有状态的。我不介意在 url 中有页面版本和 id,我只是不想在 url 中有这么长的丑陋组件路径。另外,我不明白为什么我需要从 secondPage 的 url 中的 firstPage 到表单的路径。

据我了解,wicket 1.4 HybridUrlCodingStrategy 可以做类似的事情,但我在 wicket 1.5 中找不到任何方法。这甚至可能与检票口有关吗?

任何帮助将不胜感激,因为这真的阻碍了我,而且我已经花了太多时间试图解决它,但没有运气。

4

1 回答 1

0

尝试更换:

Page secondPage = new secondPage(arg1, arg2);
RequestCycle().setResponsePage(secondPage);

和:

RequestCycle().setResponsePage(secondPage.class);

应该在我的头顶上工作......

编辑: 刚刚注意到您正在传递参数,在这种情况下,您需要将 secondPage 更改为:

class secondPage extends WebPage
{
    public secondPage(PageParameters params) //Instead of secondPage(Type1 arg1, Type2 arg2)
    {
        arg1Type arg1 = params.get(0).to*{arg1Type}*();
        arg2Type arg2 = params.get(1).to*{arg2Type}*();
    }
}

然后调用:

PageParameters params = new PageParameters();
params.set(0, arg1);
params.set(1, arg1);
RequestCycle().setResponsePage(secondPage.class, params);
于 2012-07-26T12:27:05.773 回答