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

2024-04-07

JSF 2.0 View Scope“后退按钮”安全吗?例如如果我将模型存储在 View Scope 中,并从第 1 页、第 2 页、第 3 页到第 4 页,一路修改模型对象(通过输入字段),然后按两次后退按钮返回第 2 页并进行更改(再次将我带到第 3 页),视图范围中的模型是否仅具有最初呈现第 2 页时所做的更改,还是会具有后续页面的更改?

Oracle ADF 有一个称为“进程范围”的东西,它通过标记放入会话中的内容来处理此问题,因此每个页面都有自己的模型副本。


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

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

当按下后退按钮时:

  • If browser is instructed to save the page in cache, then browser will load the page from the cache. All previously entered input values will reappear from the browser cache (thus not from the view scoped bean in the server side!). The behavior when you perform a POST request on this page depends further on the javax.faces.STATE_SAVING_METHOD configuration setting:
    • 如果设置为server(默认),然后ViewExpiredException会发生这种情况,因为从一个页面到另一页面的 POST 导航后,视图状态立即在服务器端被销毁。
    • 如果设置为client,那么它将正常工作,因为整个视图状态包含在表单的隐藏输入字段中。
  • 或者,如果浏览器被指示not将页面保存在缓存中,然后浏览器将显示浏览器默认的“页面已过期”错误页面。仅当应用 POST-redirect-GET 模式进行导航时,浏览器才会在与重定向 URL 相同的 URL 上发送全新的 GET 请求。默认情况下,所有先前输入的输入值都将被清除(因为视图作用域 bean 被重新创建),但如果浏览器打开了“自动完成”(可在浏览器级别配置),则它可能会自动填充输入。这可以通过添加来禁用autocomplete="off"属性到输入组件。当您在此页面上执行 POST 请求时,无论 JSF 状态保存方法如何,它都会正常工作。

在单个视图上执行“向导”场景会更容易,该视图包含有条件呈现的步骤,并在向导部分本身提供后退按钮。

也可以看看:

  • javax.faces.application.ViewExpiredException:视图无法恢复 https://stackoverflow.com/questions/3642919/javax-faces-application-viewexpiredexception-view-could-not-be-restored/3642969#3642969
  • JSF 2.0 中向导模式的使用范围是什么? https://stackoverflow.com/questions/9896813/what-scope-to-use-in-jsf-2-0-for-wizard-pattern
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSF 2.0 View Scope 后退按钮安全吗? 的相关文章

随机推荐

  • 如何将阴影置信区间添加到具有指定值的线图中

    我有一个汇总数据的小表 其中包含四个类别的比值比 置信上限和下限 每个类别内有六个级别 我想使用 ggplot2 生成一个图表 它看起来与指定 lm 时创建的通常图表类似 它是 se 但我希望 R 仅使用表中预先指定的值 我已经成功创建了带
  • iOS 7 以编程方式按应用程序 VPN

    我正在开发一个 iOS 7 应用程序 我想知道 每应用程序 VPN 功能是否是 手动 激活的 如位置服务 您可以选择哪个应用程序可以或不可以 或者我可以设置它通过应用程序内的代码 环顾网络 我发现有关它的信息很少 苹果的公告也没有明确说明
  • 为什么某些 API 提供商需要 API 密钥?

    多个 Web 服务 API 需要您注册 API 密钥 例如 UPS Web 服务需要一个密钥 该密钥包含在对其服务的调用中 除了用户名和密码 提供商使用此密钥做什么 也许 UPS 是唯一一家同时需要 API 密钥和用户名 密码的公司 一个想
  • 匹配字符的第一个唯一实例[重复]

    这个问题在这里已经有答案了 我正在尝试匹配only字符串中字符的第一个实例 例如sdtmig 3 1 2 with XPath 替换 https www w3 org TR xpath functions func replace并将其替换
  • GWT 计时器取消不起作用

    我正在尝试编写代码来使用 GET 和 GETQuery 区分单击和双击 我明白了here http jsfiddle net KpCwN 4 所以我将它翻译成 GWT 如下所示 我的应用程序不能有全局变量 所以我用元素属性来完成该部分 im
  • Newtonsoft.Json.JsonReaderException:无法将字符串转换为日期时间:

    我正在尝试将一些数据插入本地数据库 我收到错误 Newtonsoft Json JsonReaderException 无法将字符串转换为日期时间 20 09 1982 12 00 00 路径 0 BIRTHDAY 第 1 行 位置 71
  • 将下载的 torrent 保存在内存中而不是文件 libtorrent

    使用 Rasterbar libtorrent 我不希望下载的数据放在我的硬盘上 而是放在管道或变量或软的东西上 这样我可以将其重定向到其他地方 Mysql 甚至垃圾 如果它不是我想要的 有没有如果不是使用 Libtorrent 在 C 中
  • 如何同时编译 .Net 3.5 和 4 的项目

    我需要为 Net 3 5 和 Net 4 0 编译一个项目 做到这一点的最低摩擦方式是什么 如果我从另一个程序集引用该项目 如何确定目标运行时 或者我应该直接引用二进制文件 我只需通过两个 csproj 文件来完成此操作 然后我可以轻松设置
  • 如何处理 Web 版 Twitter 数字 API

    我正在研究 Twitter 数字 api 将其集成到我的网站 该网站需要验证用户的唯一性 这里有一个link https dev twitter com twitter kit web digits 这是唯一一篇正式说明如何在网络上实现数字
  • 使用 Delphi 2010 进行远程调试时没有断点 - 所以卡在 Delphi 7 上

    去年 8 月进行初步调查后 我又重新开始使用 Delphi 2010 进行远程调试 我已确保 D2010 具有更新 4 和 5 并且远程调试器是 Embarcadero 网站上的最新版本 遵循非常有用的说明here http delphi
  • 如何删除 Perforce 中的工作区(使用 p4v)?

    我是 Perforce 的新手 创建了一些工作区作为熟悉它的练习 现在我想删除一些工作区 我只想删除工作区 以便它们不会出现在工作区视图的下拉列表中 do not想要对实际的仓库文件执行任何操作 谷歌搜索答案会产生 使工作区处于活动状态 的
  • 如何在docker中运行mongod后运行mongorestore

    我正在尝试使用 docker 设置一个 mongodb 服务器 让它从网络下载转储并用该信息填充它 我的问题是我可以让它运行并填充数据库 但完成后 它就会关闭 这就是我解决问题的方法 sudo u mongodb usr bin mongo
  • 无法将脚本文件添加到组件 html

    我在index html root 中有一个脚本文件引用 索引 html 这里不需要 sliderfunctions js 它包含一些关于 slider 的特定功能 所以我将它携带到 slider component html 文件 但正如
  • java 图像转换为矩阵

    有一个非常简单的 jpg 图像 我想将其转换为矩阵 但是使用 getRGB i j 指向像素会给出 ArrayIndexOutOfBounds 的运行时异常 以下代码对图像大小有限制吗 它只是显示整个图像中获得的第一个颜色代码 Buffer
  • 路由跟踪如何工作? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这看起来几乎是神奇的 为了绘制到 Internet 上某个其他节点的整个路径 traceroute 命令执行什么操作 Traceroute 将 TTL
  • Android Room,如何保存一个实体,其中变量之一是密封类对象

    我想在我的 Room 数据库中保存一个对象 其中一个变量可以是一种类型或另一种类型 我认为密封类是有意义的 所以我采取了这种方法 sealed class BluetoothMessageType data class Dbm val da
  • 如何获取和设置 ag-grid 状态?

    如何获取并重新设置 ag grid 表的状态 我的意思是 正在显示哪些列 以什么顺序 使用什么排序和过滤等 Update getColumnState 和 setColumnState 似乎接近我想要的 但我无法弄清楚应该保存和恢复状态的回
  • 取两个变量作为日期和时间并组合起来形成一个日期

    我想采用两个变量 一个代表日期 另一个代表时间 然后将它们组合起来形成一个日期 然后我想使用该组合日期和时间来检查当前日期和时间是否距组合日期和时间 24 小时或更短 game date game date game time game t
  • 如何使用 INLINE CSS 将 Excel 电子表格导出到 HTML 表格?

    我想知道如何将电子表格中的表格转换为 html 格式 而无需所有 Microsoft 特定代码 我们的网页托管在其他地方 这意味着我无权访问我们页面的一部分 我们只能将内容插入 我只是希望表格保留相同的字体 边框和格式 并将任何和所有 CS
  • JSF 2.0 View Scope 后退按钮安全吗?

    JSF 2 0 View Scope 后退按钮 安全吗 例如如果我将模型存储在 View Scope 中 并从第 1 页 第 2 页 第 3 页到第 4 页 一路修改模型对象 通过输入字段 然后按两次后退按钮返回第 2 页并进行更改 再次将