JSF 2.0 View Scope后退按钮安全吗?

Bes*_*ces 12 jsf-2

JSF 2.0 View Scope"后退按钮"安全吗?例如,如果我在View Scope中存储模型并从第1页,第2页,第3页到第4页,沿途修改模型对象(通过输入字段),然后点击后退按钮两次返回页面2并进行更改(再次转到第3页),视图范围中的模型是否仅包含最初呈现第2页时所做的更改,还是后续页面的更改?

Oracle ADF具有/称之为"进程范围"的东西,它通过标记放置到会话中的内容来处理此问题,因此每个页面都有自己的模型副本.

Bal*_*usC 18

首先,视图范围绑定到特定页面/视图.多个视图不会共享相同的视图范围bean.视图范围以初始GET请求开始,并在POST操作使用非null返回值导航时停止.

通常存在以下场景,具体取决于是否指示浏览器缓存页面以及JSF状态保存配置.我假设这些页面之间的导航是通过POST请求进行的(因为它听起来很像"向导"场景).

按下后退按钮时:

  • 如果指示浏览器将页面保存在缓存中,则浏览器将从缓存加载页面.所有先前输入的输入值将从浏览器缓存中重新出现(因此不会从服务器端的视图范围bean中出现!).在此页面上执行POST请求时的行为还取决于javax.faces.STATE_SAVING_METHOD配置设置:
    • 如果设置为server(默认值),ViewExpiredException则会发生a,因为在POST导航之后,从一个页面到另一个页面,视图状态在服务器端被删除.
    • 如果设置为client,则它将起作用,因为整个视图状态包含在表单的隐藏输入字段中.
  • 或者,如果指示浏览器将页面保存在缓存中,则浏览器将显示浏览器默认的"页面已过期"错误页面.仅当POST-redirect-GET模式应用于导航时,浏览器才会在与重定向URL相同的URL上发送全新的GET请求.默认情况下,所有先前输入的输入值都将被清除(因为重新创建了视图范围bean),但如果浏览器启用了"自动完成"(可在浏览器级别配置),则可能会自动填充输入.通过向autocomplete="off"输入组件添加属性可以禁用此功能.当您在此页面上执行POST请求时,无论JSF状态保存方法如何,它都将正常工作.

在单个视图上执行"向导"方案更容易,该视图包含有条件渲染的步骤,并在向导部分本身提供后退按钮.

也可以看看: