Hy,
我是JSF的新手,我读过JSF如何在会话中存储UIComponents或常见的屏幕。一些问题:
-
例如,当您请求一个jsf文件时,jsf首先对其进行分析,并用他的呈现器、验证器、转换器在内存中创建类似屏幕的表示,因为jsf下次会更快地处理来自该视图的请求,因为它已经用他的验证器、转换器…创建了这个UIComponent结构。。。。,正确的
-
使用带有java代码的JSF,您可以像javaswing一样修改呈现给用户的屏幕,对吧?
-
这些屏幕保存在会话中,对吗?
-
我不知道的是,当用户在浏览器中用他发送的值按下后退按钮时,JSF是否可以重新填充表单,这可能吗?
-
表单字段的值保存在模型bean中,但这些值存储在其他地方?,在UIComponent结构中?
-
如果用户按下浏览器的后退按钮,并且他在表单中发送的值被保存在具有请求范围的bean中,那么将无法重新填充表单,除非它将表单的值存储在UIComponent结构中,对吧?
感谢
- 可能有一些缓存,但据我所知,这不是设计或规范中固有的
- 你可以修改演示文稿,是的;像javax,swing,no
- 没有
- 如果浏览器重新发送POST,将发生与第一次相同的事情。表单字段值被重新发送,JSF处理它们,和以前一样
- 表单字段的值在表单字段和通过EL指定为值的任何backingbean属性中
- 请参见(4(。同样的问题,同样的答案
对于您的主题问题:默认情况下,是。除非组件被标记为瞬态
问题解答:
1.(这不仅仅是因为速度快。视图的恢复是必要的,因为它保存了有关所需转换器、验证器以及UI和bean之间连接的信息。即EL表达式。如果您没有活动视图,并且触发了一个返回请求(带有ViewState(,则会得到ViewExpiredException。如果触发一个没有ViewState的请求,则会生成一个新视图。
2.(基本上是的。这与swing类似,因为您可以实际地向树中添加新组件。
3.(默认情况下,是。但是,您可以编写自己的StateManager,并且可以在任何需要的地方存储和检索视图。
4.(后退按钮(默认情况下(会返回浏览器的历史记录,并显示缓存中的页面。如果您的视图不是瞬态的,那么它可以存储在会话中,除非它太旧(请参阅相应的上下文参数(。若您从一个旧视图触发了一个请求,而该视图仍在会话中,它将得到正确处理。否则,它将在APPLY_REQUEST阶段引发ViewExpiredException。
5.(这些值存储在bean中。该组件只保存指向bean属性的EL表达式
6.(参见4.(和5.(