2011-08-02 16 views
1

我已经将web.xml中会话属性中的逻辑视图和视图的数目定义为1,因此最多只有1个视图。鉴于此,我有几个问题:JSF视图是否在用户之间共享?

  • 这是#特定给定用户吗?意思是,这是否将每个用户的视图数限制为1? **如果是,那么跨多个用户可以有多个相同JSP的视图表示吗?

  • 有没有一种方法可以跨用户共享JSF视图(假设视图相当通用,并且不包含任何用户特定的数据)?

谢谢!

回答

3

如果你的“用户”的一般定义实际上等于“一个HTTP会话”,那么是的,你是对的。视图基本上存储在HTTP会话中,并由名称为javax.faces.ViewState的隐藏HTML输入字段引用。不同的HTTP会话不会彼此分享他们的观点,否则显然会是一个巨大的漏洞和安全漏洞。

通过将会话中(逻辑)视图的数量设置为1,您可以删除用户可以在同一会话的不同窗口/选项卡中使用包含POST表单的多个视图的可能性。每当最终用户打开一个新窗口/选项卡时,只要enduser在上一个窗口/选项卡中触发POST请求,最终用户就会收到一个ViewExpiredException,因为您已将其配置为在会话中只保留一个视图,这是最后开了一个。

+0

感谢BalusC。嗯...... :-(在这种情况下,处理JSF中静态(又名,只读)视图的最好方法是什么?假设大多数页面对于用户基类是通用的,除了一些例外, (尽量减少整个内存占用量)在JSF(在portlet中)这是不可能的吗?希望不是。 –

+0

我不想额外的开销(因为它会增加初始化的数量)我更倾向于一个应用程序范围的bean,它考虑到数据的性质,它对用户群体是通用的。我并没有清楚地看到这个 - 每一个JSP都会产生一个独特的视图(对于一个给定的会话)虽然我可以玩被引用bean的范围,但我想成为能够在整个会议中共享相同的观点(考虑其通用性),从而削减总数#的意见。 –

+0

视图仅在包含POST表单的会话中创建并存储,如''中所示。如果你没有它们(也不适合普通的页面到页面导航!),那么你也不需要担心这一点。顺便说一下,在JSF 2.x中,由于采用了新的局部状态保存机制,平均视图大小与JSF 1.x相比大大减少了。状态只包含必要的表单组件而不是整个标记。 – BalusC