Jon*_*nik 2 java wicket friendly-url
Wicket是否允许在PageParameters对象中传递以下两种参数?显然不是?
accountId这是在URL中所示(/account/<ID>)infoMessage参数未在(可收藏的)URL中显示我目前正在使用IndexedHybridUrlCodingStrategy来处理相关页面,只需尝试参数"0"和"infoMessage"就会产生以下异常:
WicketMessage:并非所有参数都已编码.确保所有参数名称都是从零开始的连续顺序的整数.当前参数名称为:[0,infoMessage]
如果我将"infoMessage"参数名称更改为"1",它可以工作,但会产生一个丑陋的URL(在这种情况下类似/account/42/Tosite%20108207%20tallennettiin.5),这不是我想要的.
现在,明显的答案可能是infoMessage不应该在PageParameters中.但事实是,我尝试将其添加为普通的构造函数参数,如下所示:
public AccountPage(PageParameters parameters, String infoMessage) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法在一个重要的用例中失败了.删除相关帐户持久"记录"对象后,下面也不能正常加载AccountPage(已删除的记录仍是可见的).此代码在AjaxFallbackLink的onClick()中执行.
setResponsePage(new AccountPage(AccountPage.pageParameters(account), message));
Run Code Online (Sandbox Code Playgroud)
另一方面,我原来的做法......
setResponsePage(AccountPage.class, AccountPage.pageParameters(account));
Run Code Online (Sandbox Code Playgroud)
...工作正常,因为它以某种方式"更彻底地"加载AccountPage,但是,再次,我不知道如何干净地传递infoMessage参数.
(AccountPage.pageParameters()上面是一个简单的静态实用程序,用于创建具有"0"=帐户ID的适当PageParameters.AccountPage构造函数始终使用ID从持久性加载帐户.)
有任何想法吗?也许使用AjaxFallbackLink部分导致问题?
使用Wicket 1.4.
从我在您的问题中看到的,您尝试呈现可收藏的页面并向用户显示反馈消息(最有可能在a中FeedbackPanel),但您不希望该消息成为URL的一部分.
您要做的是告诉Session您有一条信息性消息,并让反馈面板处理该消息.
@Override void onSubmit() {
... save object ...
getSession().info("Object ... has been saved");
setResponsePage(ObjectPage.class, new PageParameters("id="+object.getId()));
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您告诉Wicket在会话中临时存储消息,直到它被反馈面板呈现.这个成语也被称为"flash消息".
您不能将两个PageParameters参数和另一个参数用作构造函数参数,因为在请求页面时,Wicket无法使用此类构造函数创建页面实例.Wicket只知道如何使用默认构造函数或带PageParameters参数的页面实例化页面.