0

嗨,

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

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

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

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

  4. 我不知道的是,当用户使用他发送的值按下浏览器中的后退按钮时,JSF 是否可以重新填充表单,这可能吗?

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

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

谢谢

4

2 回答 2

0

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

对于你的问题:

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

2.) 基本上是的。就您可以务实地向树中添加新组件而言,这就像摇摆一样。

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

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

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

6.) 见 4.) 和 5.)

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