2012-10-08 65 views
4

我正在处理用户会话将在点击链接时被替换的项目。由于页眉,页脚和内容(即整个页面)中的所有数据都依赖于会话数据,因此必须重新加载整个页面(所有子页面)。我试过bookmarkablepagelink,但是我不能在这个链接上放置一个动作(改变会话)。我也试图做一个链接,改变会话,然后点击bookmarkablepagelink以编程方式,但我找不到一种方式点击链接,而不使用JavaScript(这是在这个项目中没有其他选择)。刷新整个页面检票

任何好建议如何做到这一点?

+1

欢迎来到Stack Overflow!我们鼓励你[研究你的问题](http://stackoverflow.com/questions/how-to-ask)。如果你已经[尝试了某些东西](http://whathaveyoutried.com/),请将其添加到问题中 - 如果没有,请先研究并尝试您的问题,然后再回来。 – 2012-10-08 10:12:34

回答

5

在该链接的onClick方法,做对话重置,然后

setResponsePage(getPage()); 

和页面应该很好地刷新。

+0

这不是必需的:除非通过setResponsePage(otherpage)明确告知,否则Wicket的默认设置是重新渲染当前页面。 –

+0

如果它是一个ajax链接? –

+0

对于Ajax链接来说,确实如此。 –

5

解决你的问题是双重的:你替换会话,可能最好通过

getSession().invalidateNow(); 

完成并发送重定向到书签的网址。这可以用setResponsePage做,以及:

setResponsePage(OtherPage.class, new PageParameters().add("foo", "bar")); 

这将发送302重定向到浏览器的书签的网址和提供的参数,使servlet容器足够的机会重置会话(基本上注销用户),而等待浏览器回应。它也会触发一个新的会话cookie(因为前一个会话不再有效)。