【发布时间】:2012-08-27 03:22:19
【问题描述】:
如何从 Servlet 访问 JSF ViewScoped 托管 bean?
(假设有问题的托管 bean 已经创建,但仍未销毁)
【问题讨论】:
-
如果您需要在其范围之外访问 bean,这表明它的范围没有适当。
-
只要对应的页面处于活动状态,ViewScoped bean 处于活动状态,那么为什么我不能从该页面调用 Servlet?
如何从 Servlet 访问 JSF ViewScoped 托管 bean?
(假设有问题的托管 bean 已经创建,但仍未销毁)
【问题讨论】:
视图范围的变量存储在组件树上的view map 中。要在视图上下文之外访问此数据,您必须使用 create a JSF context 和 restore the view 请求。这涉及重写JSF container 提供的大部分功能。
JSF 2 提供了无需刷新页面即可与服务器端状态交互的机制:AJAX tags 和 JSF JavaScript API。如果可能的话,我会考虑利用这些。
或者,将数据放入可通过 servlet(会话)轻松访问的范围内。
由于视图状态通常保存在会话中,因此在技术上很可能从这里访问视图状态。但这将涉及特定于实现的黑客行为,这些黑客行为可能无法在底层框架升级后幸存下来。我什至不会将此视为解决方案。
【讨论】: