如何避免刷新页面时重新执行上次表单提交操作?

2024-05-15

我正在从事用 JSF 开发的项目。每当我们刷新 JSF 页面时,就会重新执行最后一个操作事件。例如,当我提交表单以删除列表的条目并刷新结果页面时,列表中同一位置的另一个条目也会被删除。这是如何引起的以及如何解决?

我在 faces-config.xml 中尝试过,但这并不能解决我的问题,

为了更清楚地了解我面临的问题是,我使用 commandLink 从数据表中删除一项资源,我正在使用 actionlistener 属性,该属性调用我的 backingbean 中的一种方法,所以问题是当我刷新发生页面操作事件和方法时执行后会从表中删除另一个资源。提前致谢


这些症状表明该页面是通过 POST 请求请求的,并且您忽略了网络浏览器关于刷新请求时将重新发送数据的警告。刷新 POST 请求当然会导致它被重新执行。这不是 JSF 特有的问题。

常见的解决方案是在执行 POST 请求后发送重定向到 GET 请求。这样客户端最终将在浏览器视图中收到 GET 请求。刷新此内容将仅重新执行 GET 请求,该请求不会(不应该)修改任何内容(除非您在与视图关联的请求作用域 bean 的构造函数中执行此操作)。这也称为POST-重定向-GET http://en.wikipedia.org/wiki/Post/Redirect/Get图案。

使用 JSF 2.0,您只需添加以下内容即可实现此目的faces-redirect=truebean 操作结果的参数。

public String submit() {
    // ...

    return "viewid?faces-redirect=true";
}

如果你还在用老式的<navigation-case>s in faces-config.xml,那么添加即可达到相同的效果<redirect/>到此案。

唯一的缺点是请求作用域的 bean 会以这种方式被垃圾化(重定向基本上指示网络浏览器创建一个全新的请求),因此您无法在请求作用域中传递数据以便在重定向的页面中重新显示它。例如,显示成功消息。在 JSF 2.0 中,您可以使用 flash 作用域来实现此目的,或者只是让 POST 通过<f:ajax>提交而不是正常的提交。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免刷新页面时重新执行上次表单提交操作? 的相关文章

随机推荐

  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV
  • 如何更改matplotlib中双头注释的头大小?

    Below figure shows the plot of which arrow head is very small 我尝试了下面的代码 但它不起作用 它说 引发 AttributeError 未知属性 s k 属性错误 未知属性头宽
  • 每行中非空列的计数

    我有一个包含 4 列的表 在第 5 列中我想存储前 4 列中有多少个非空列的计数 例如 其中 X 是任意值 Column1 Column2 Column3 Column4 Count X X NULL X 3 NULL NULL X X 2
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 如何在 xslt 2.0 中解析字符串到日期

    是否可以像这样转换字符串30042013 2013 年 4 月 30 日 日期格式 所以我可以稍后在类似的函数中使用它format date 就像托马拉克说的 你可以使用substring and concat 要构建一个字符串 您可以将其
  • 如何修复 [错误:flutter/lib/ui/ui_dart_state.cc(166)] 未处理的异常:NoSuchMethodError:在 null 上调用方法 '<='。错误?

    我收到此错误 但由于昨天相同的代码有效 所以我不知道如何修复它 这是一个测试应用程序 使用谷歌地图和 firebase firestore 来保存和查询地图上的标记 我想这可能和我安装的flutter有关系 所以我尝试使用稳定版和测试版 但
  • 彭博开放 API

    彭博开放 API最近宣布 http www computerworlduk com news it business 3334375 bloomberg market data api made public 这只是彭博软件开发工具包 ht
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 如何让 graphviz 记录的单元格对齐

    我正在 graphviz 中使用记录节点来制作一个简单的表格 但它看起来错误 digraph g node shape record height 08 node1 label DBAT 0 1 2 3 4 5 6 7 8 9 10 11
  • 如何从 nltk 下载器中删除数据/模型?

    我在 python3 NLTK 中安装了一些 NLTK 包 通过nltk download 尝试过它们 但不需要它们 现在想删除它们 我怎样才能删除例如包large grammars来自我的 NLTK 安装 我不想删除完整的 NLTK 安装
  • 为什么自类型类可以声明类

    我知道 Scala 只能混合特征 这对于依赖注入和蛋糕模式是有意义的 我的问题是为什么我仍然可以声明一个需要另一个 类 但不需要特征的类 Code class C class D self C gt 这仍然编译成功 我认为它应该编译失败 因
  • 在父类中访问子类变量

    我有一个父类和一个继承的子类 我想知道如何访问我的父类中的子类变量 我尝试了这个但失败了 class Parent object def init self print x class Child Parent x 1 x Child Er
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • 需要一些在自定义 AngularJS 标签中绑定属性的示例

    我正在尝试创建类似于以下内容的自定义标签
  • 如何从 Mac OS X 中完全删除 Eclipse(包括设置和插件)?

    我的 Eclipse 与 GAE 损坏并且工作异常 所以我从Application文件夹中删除了Eclipse 但是留下了垃圾 我重新下载了全新的 eclipse 但它以旧设置运行 并且损坏的 GAE 结构仍然存在 如何从 Mac 上完全删
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • 实现 Index 特征以返回非引用的值

    我有一个想要实现的简单结构Index 但作为 Rust 的新手 我在借用检查器方面遇到了许多麻烦 我的结构非常简单 我想让它存储一个起始值和步骤值 然后当由usize它应该返回start idx step pub struct MyStru
  • GoLang ssh:尽管将其设置为 nil,但仍出现“必须指定 HosKeyCallback”错误

    我正在尝试使用 GoLang 连接到远程服务器 在客户端配置中 除了用户和密码之外 我将 HostKeyCallback 设置为 nil 以便它接受每个主机 config ssh ClientConfig User user HostKey
  • 如何避免刷新页面时重新执行上次表单提交操作?

    我正在从事用 JSF 开发的项目 每当我们刷新 JSF 页面时 就会重新执行最后一个操作事件 例如 当我提交表单以删除列表的条目并刷新结果页面时 列表中同一位置的另一个条目也会被删除 这是如何引起的以及如何解决 我在 faces confi