2

我有一个支持我的网络应用程序的 Session Scoped 托管 bean。在这个网络应用程序中,我希望用户能够执行包含用户 ID 和日期的 URL。然后这将触发托管 bean 中的一个方法,并将 Web 应用程序跳转到该用户 ID 和日期。

简单的答案是将用于从 URL 中提取参数的代码放在托管 bean 的构造函数中。但问题在于它是 Session Scoped 的,所以构造函数只在初始加载时被调用。如果用户打开 web-app 并对其进行操作,然后使用新参数执行 URL,则无法调用构造函数。

无论会话状态如何,每次执行应用程序 URL(每次加载页面)时,是否有某种方法可以在托管 Bean 上执行方法?

4

1 回答 1

2

通过将作业破解为视图调用的 getter 是可能的,但是不,您真的不想拥有它。会话范围的 bean 在同一会话内的所有浏览器窗口/选项卡之间共享。窗口/选项卡中的每次更改都会影响所有其他窗口/选项卡。这可能会导致“wtf?” 因此对您网站的一般 UX(用户体验)不利的体验。

如果您想拦截 GET 请求,或者如果您使用 JSF 2.0,那么您确实需要将该 bean 放在请求范围内,如果您想在初始 GET 请求之后维护后续 POST 请求中的状态,则需要将该 bean 放在视图范围内。会话范围的 bean 旨在保存会话范围的数据,例如登录用户、其首选项等。它不适用于请求范围的数据,例如请求参数等。

于 2011-08-29T18:28:30.633 回答