使用 URL 参数的 JSF 托管 Bean 方法调用
Posted
技术标签:
【中文标题】使用 URL 参数的 JSF 托管 Bean 方法调用【英文标题】:JSF Managed Bean method call using URL parameters 【发布时间】:2011-11-06 05:53:43 【问题描述】:我有一个支持我的 web 应用程序的 Session Scoped 托管 bean。在这个网络应用程序中,我希望用户能够执行包含用户 ID 和日期的 URL。然后这将触发托管 bean 中的一个方法,并将网络应用程序跳转到该用户 ID 和日期。
简单的答案是将用于从 URL 中提取参数的代码放在托管 bean 的构造函数中。但问题在于它是 Session Scoped 的,所以构造函数只在初始加载时被调用。如果用户打开 web-app 并对其进行操作,然后使用新参数执行 URL,则无法调用构造函数。
是否有某种方法可以在每次执行应用程序 URL 时(每次加载页面时)在托管 Bean 上执行方法,而不管会话状态如何?
【问题讨论】:
【参考方案1】:可以通过将作业破解到视图调用的 getter 中,但是不,您真的不想拥有它。会话范围的 bean 在同一会话内的所有浏览器窗口/选项卡之间共享。窗口/选项卡中的每次更改都会影响所有其他窗口/选项卡。这可能会导致“wtf?”因此对您网站的一般 UX(用户体验)不利。
如果您想拦截 GET 请求,或者如果您使用 JSF 2.0,您确实需要将该 bean 放在请求范围内,如果您想在初始 GET 之后保持后续 POST 请求中的状态,则需要将该 bean 放在视图范围内要求。会话范围的 bean 旨在保存会话范围的数据,例如登录用户、其首选项等。它不适用于请求范围的数据,例如请求参数等。
【讨论】:
以上是关于使用 URL 参数的 JSF 托管 Bean 方法调用的主要内容,如果未能解决你的问题,请参考以下文章
JSF/Prime(FileUpload 组件)multipart-form 不加载托管 bean 类参数
迁移到 tomcat 后,将枚举值作为参数从 JSF 页面传递给 bean 方法失败