是JSF 2.0 View Scope"后退按钮"安全?例如如果我在View Scope中存储模型并从第1页,第2页,第3页到第4页,沿途修改模型对象(通过输入字段),然后按两次后退按钮返回第2页并进行更改(再次转到第3页),视图范围中的模型是否只有在最初呈现第2页时所做的更改,或者它是否具有后续页面?变化?
Oracle ADF已经/有一些名为"进程范围"通过标记放入会话的内容来处理此问题,因此每个页面都有自己的模型副本。
答案 0 :(得分:17)
首先,视图范围绑定到特定页面/视图。多个视图不会共享相同的视图范围bean。视图范围以初始GET请求开始,并在POST操作使用非null
返回值导航时停止。
通常会出现以下情况,具体取决于是否指示浏览器缓存页面以及JSF状态保存配置。我假设这些页面之间的导航是通过POST请求进行的(因为它听起来很像“向导”场景)。
按下后退按钮时:
javax.faces.STATE_SAVING_METHOD
配置设置:
server
(默认值),则会出现ViewExpiredException
,因为在从一个页面导航到另一个页面后,视图状态在服务器端被删除。client
,则它将正常工作,因为整个视图状态包含在表单的隐藏输入字段中。autocomplete="off"
属性,可以禁用此功能。当您在此页面上执行POST请求时,无论JSF状态保存方法如何,它都将正常工作。在单个视图上执行“向导”方案更容易,该视图包含有条件渲染的步骤,并在向导部分本身提供后退按钮。