2012-07-26 29 views
0

我知道这个(另一个)网站上有很多类似的问题,但他们都没有帮我解决我的问题。 我有2个检票状态页面。页面被安装如下:wicket 1.5网址表格提交后的状态页

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

当第一次加载页面第一页时,它加载默认的构造函数和URL看起来像所需的。一旦在第一页的形式被提交,我前进至状态页面secondPage如下:

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

虽然第二页被安装时,所得到的页(secondPage)呈现与下面的网址:

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

我想要的是第二页用我定义的安装路径进行渲染。 我知道这是一个有状态的页面,为了让wicket加载它的确切实例,url必须是有状态的。我不介意在url中拥有一个页面版本和id,我只是不想在url中有这么长的难看的组件路径。 也,我不明白为什么我需要从第二页的网址的第一页的形式的路径。

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

任何帮助将非常感谢,因为这真的阻止我,我已经花了太多时间试图解决它没有运气。

回答

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); 
+0

你的建议,问题是ARG1和ARG2是复杂的Java对象,而PageParameters只处理的StringValue,所以每当我尝试添加/让我的参数传递给了PageParameters我得到一个ClassCastException。 – zuckermanori 2012-07-26 14:12:16

+0

公平的,我发现这个:http://apache-wicket.1842946.n4.nabble.com/Object-in-PageParameters-td1870381.html它基本上建议传递一个唯一的ID可以用来重建参数。如果你不能将对象保存到数据库并检索它,请尝试序列化它...不理想,你也可以尝试这样的东西:http://stackoverflow.com/questions/8602489/delete-version-number- in-url – Jamey 2012-07-26 15:06:05

+0

首先你可以同时拥有两个构造函数,一个带有parmas调用第二个构造函数。 – Kazaag 2012-07-26 18:35:00