JSF是否在会话中存储UIComponents?

时间:2014-05-04 23:21:11

标签: jsf uicomponents

HY,

我是JSF的新手,我已经了解了JSF如何在会话中存储UIComponents或常用的屏幕。一些问题:

  1. 例如,当您请求jsf文件时,JSF首先对其进行分析并使用其渲染器,验证器和转换器在内存中创建类似屏幕的表示,因为JSF将在下次更快地处理来自此视图的请求,因为它已经用他的验证器,转换器......创建了这个UIComponent结构,对吗?

  2. 使用带有java代码的JSF,您可以像java swing一样修改呈现给用户的屏幕,对吗?

  3. 这些屏幕保存在会话中,对吗?

  4. 我不知道的是,当用户例如在浏览器中按后退按钮时,JSF可以重新填充表单,这是否可能?

  5. 表单字段的值保存在模型bean中但是这些值存储在其他地方?可能在UIComponent结构中?

  6. 如果用户按下浏览器的后退按钮并且他在表单中发送的值保存在具有请求范围的bean中,会发生什么情况,除非存储值,否则无法重新填充表单在UIComponent结构中的形式,对吗?

  7. 由于

2 个答案:

答案 0 :(得分:0)

  1. 可能有一些缓存,但就我所知,它在设计或规范中并不是固有的。
  2. 您可以修改演示文稿,是的;比如javax,swing,no。
  3. 没有
  4. 如果浏览器重新发送POST,则会发生与第一次相同的事情。重新发送表单字段值,JSF处理它们,与之前相同,
  5. 表单字段的值位于表单字段和任何通过EL指定为值的支持bean属性中。
  6. 见(4)。同样的问题,同样的答案。

答案 1 :(得分:0)

对于您的主题问题:默认情况下,是的。除非该组件被标记为瞬态

对于你的问题:

1。)这不是(只是)速度。需要恢复视图,因为它包含有关所需转换器,验证器以及UI和bean之间的连接的信息。即EL表达式。如果您没有活动视图并且触发回发请求(使用ViewState),您将获得ViewExpiredException。如果您在没有ViewState的情况下触发请求,则会生成新视图。

2。)基本上是的。就 swing来说,你可以实际地将新组件添加到树中。

3。)默认情况下,是的。但是您可以编写自己的StateManager,并且可以在任何地方存储和检索视图。

4.。)后退按钮(默认情况下)返回浏览器的历史记录,并显示缓存中的页面。如果您的视图不是暂时的,那么它可以存储在会话中,除非它太旧(请参阅corresponding context param)。如果您从旧视图触发请求并且该视图仍在会话中,则将正确处理该视图。否则,它将在APPLY_REQUEST阶段抛出ViewExpiredException。

5.)这些值存储在您的bean中。该组件仅保存指向bean的属性的EL表达式

6。)见4.)和5。)