如何在每个页面重新加载时调用@SessionScoped托管bean方法?

时间:2015-07-01 20:02:21

标签: jsf

我的托管bean曾经是@ViewScoped,并且我使用@PostConstruct带注释的方法来定位每次通过浏览器URL刷新页面时我想要执行的各种功能。但是,该页面需要查询字符串参数处理,我需要使用一些AJAX,然后在AJAX之后重定向到同一页面,以避免将查询字符串参数从缓存中复制到URL字符串中,我将范围更改为{{ 1}}所以我可以做到

@SessionScoped

并且如果是@ViewScoped则需要从查询字符串重新加载的会话参数可以保留在那里。但是,问题是@PostConstruct方法,除了在会话开始时可以完成的其他事情之外,确实会在每个页面重新加载时执行EJB调用,而不管范围如何。对于表单提交很简单,因为我只是在表单提交调用的托管bean方法中调用EJB方法,但问题是如果用户在浏览器中点击刷新,就像在@ViewScoped中那样运行它不会运行

有没有办法让我保持两个范围的最佳状态,IOW在缓存中保留已经处理的查询字符串参数而不必重新处理它们,比如@SessionScoped提供给我同时有一个方法,是否在每次重新加载页面时调用,而不仅仅是在托管bean生命周期开始时?

我知道我可以回到@ViewScoped并在上面的代码示例中FacesContext.getCurrentInstance().getExternalContext().redirect("mypage.jsf"); 之后重新协调所有查询字符串参数,但这看起来太手动了。我希望JSF中有一条捷径。

0 个答案:

没有答案