验证错误后,后续 ajax 请求从 UI 组件获取值,而不是从 Bean 获取值

2024-02-24

在我基于 JSF 2 的应用程序中,我有一个表单,其中包括(以及其他 UI 组件)一些复选框。

在复选框上,我注册了 ajax 请求,在选中它们时会触发这些请求。 ajax 请求实际上只会更新支持 bean 中另一个复选框的值。 因此,另一个复选框也将被选中(当它被重新渲染时 - 因为它将在渲染响应阶段从支持 bean 获取更新的值)。

在提交整个表单并发生验证错误之前,这种方法可以正常工作。 然后,ajax 请求仍然有效并更改支持 bean 上的值,但在重新呈现更新后的复选框的阶段,它的值不是从支持 bean 中获取,而是从从 a 获取的缓存值中获取。ComponentStateHelper class.

据我了解,这是用于 JSF 2 的新功能,仅存储对组件树的部分更改。

我不明白的是:这与验证阶段有何关系?为什么里面有一个缓存值StateHelper当验证发现错误时我的复选框的类?


这是一个已知问题,并在这个答案 https://stackoverflow.com/questions/6642242/how-can-i-populate-a-text-field-using-primefaces-ajax-after-validation-errors-oc/6845800#6845800。简而言之,问题是由于要渲染的组件无效而引起的<f:ajax render>但没有被执行<f:ajax execute>与原始提交的值一起保持无效状态。当JSF渲染输入组件时,JSF会首先检查提交的值是否不存在null然后显示它,否则显示型号值。您基本上需要重置要渲染但不是由ajax执行的输入组件的提交值。

为了实现这一点,您可以使用ActionListener http://docs.oracle.com/javaee/6/api/javax/faces/event/ActionListener.html which 基本上执行以下操作:

UIViewRoot viewRoot = context.getViewRoot();
PartialViewContext partialViewContext = facesContext.getPartialViewContext();
Set<EditableValueHolder> inputs = new HashSet<EditableValueHolder>();

// First find all to be rendered inputs and add them to the set.
findAndAddEditableValueHolders(partialViewContext.getRenderIds(), inputs);

// Then find all executed inputs and remove them from the set.
findAndRemoveEditableValueHolders(partialViewContext.getExecuteIds(), inputs);

// The set now contains inputs which are to be rendered, but which are not been executed. Reset them.
for (EditableValueHolder input : inputs) {
    input.resetValue();
}

这已被报道为JSF 问题 1060 http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1060并且已经实施了完整且可重用的解决方案OmniFaces http://omnifaces.org图书馆作为ResetInputAjaxActionListener http://omnifaces.org/docs/javadoc/current/org/omnifaces/eventlistener/ResetInputAjaxActionListener.html(源代码here https://github.com/omnifaces/omnifaces/blob/master/src/main/java/org/omnifaces/eventlistener/ResetInputAjaxActionListener.java并展示演示here http://showcase.omnifaces.org/eventlisteners/ResetInputAjaxActionListener).

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

验证错误后,后续 ajax 请求从 UI 组件获取值,而不是从 Bean 获取值 的相关文章

  • Java:如何从转义的 URL 获取文件?

    我收到了一个定位本地文件的 URL 事实上我收到的 URL 不在我的控制范围内 URL 按照 RFC2396 中的定义进行有效转义 如何将其转换为 Java File 对象 有趣的是 URL getFile 方法返回一个字符串 而不是文件
  • org.apache.sling.api.resource,version=[2.3,3) -- 无法解析

    您好 我无法访问我的项目内容 我已经上传了从 CQ 访问内容所需的所有包 我唯一能看到的是 org apache sling api resource version 2 3 3 无法解析 这是否是异常的原因 如果是 请告诉我如何解决 中Q
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • MVC 模式中的验证层

    验证模型将使用的数据的最佳位置在哪里 例如 考虑登记表 我们有一些来自注册表的数据 那么验证这些数据的最佳位置在哪里 我们应该通过 if 语句或特殊的验证器类来检查每个数据 这意味着大量的编码 所以我想了解在哪里可以做到这一点 在控制器中
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • Angular 模板验证表单

    我正在研究表单验证 我正在使用模板驱动的验证表单 其编码如下 现在工作正常 但是当我尝试添加时 username ngModel and password ngModel 在创建验证类的输入中 它向我显示一个错误 也请找到该错误 div c
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个

随机推荐

  • Next js 网站的重新加载重定向到 Apache 服务器上的主页

    我有一个静态的 Next js 网站托管在 Apache 服务器 控制面板 上 起初当我重新加载页面时 它给了我一个 404 错误 但现在当我重新加载时 它总是转到主页 我尝试包含 htaccess文件放在我的公共文件夹中 但它不起作用 这
  • 如何使用 JSON 对象初始化 TypeScript 对象?

    我从对 REST 服务器的 AJAX 调用接收到一个 JSON 对象 该对象具有与我的 TypeScript 类匹配的属性名称 这是这个问题 https stackoverflow com questions 22875636 how do
  • Laravel 迁移到 mix 会删除无效的 NODE_OPTIONS 环境变量:不允许 --openssl-legacy-provider

    当我运行yarn run dev时 它编译没有任何问题 但是当我运行yarn run prod时 出现以下错误 Mix Compiled with some errors in 21 47s ERROR in js app js js ap
  • Selenium Webdriver C# element.Enabled 当元素仍处于禁用状态时评估为 true

    我的自动化测试过去运行顺利 但我们将 QA 环境移至不同的服务器 现在测试失败 因为它不断尝试单击仍在加载且变灰 禁用的元素 以下是在以前的服务器上运行良好的部分代码 while less than 7 seconds if driver
  • Angular2/Ionic2 中的 Google Drive APIgapi.client.drive

    我编写 Angular2 Ionic2 应用程序来显示列表并将文件上传到 Google Drive 使用 Google 登录工作正常 但是gapi client drive未定义 我应该做什么来解决它或者有方法代替 我安装了 npm ins
  • 重用意图安全吗?

    Android 文档将 Intent 定义为 包含要执行的操作的抽象描述的信息包 这表明您应该能够在需要时多次重用单个 Intent 对象 但我还没有看到任何示例表明这种情况 可以安全执行 是否有任何理由不执行以下操作 private fi
  • C# 运行时错误:“DataGridViewComboBoxCell 值无效”

    我花了一天的大部分时间来解决这个问题 但解决方案仍然困扰着我 我的 Winform 应用程序包含一个DataGridView其中两列是ComboBox下拉列表 奇怪的是 DataGridView似乎填充正确 但在填充时或每当有鼠标悬停或看似
  • 仅运行 ansible playbook 中的一项任务和处理程序

    如何从 Ansible playbook 运行单个任务以及在该任务成功完成时收到通知的处理程序 同时跳过相关 playbook 中的所有其他任务 目前我执行以下操作 ansible playbook start at task task1
  • 在空手道和放心之间选择

    尝试在 Karate 框架和 Rest Assured 之间进行选择以实现 API 自动化 其中包括 Rest API 和 GraphQL 我们还可以增强框架来执行 UI 自动化 我经历了寻找的一般过程 Karate 是为 GraphQL
  • Google Drive API 进度条错误

    我编写了以下代码来将文件上传到我的 Google 云端硬盘帐户 它工作得很好 然后我尝试添加一些上传进度跟踪器 但遇到了一些问题 它可以工作 但进度几乎立即达到 100 远远早于上传完成 export async function uplo
  • 使用常量引用删除引用

    对于参数类 C 我希望始终获得 原始 类型 而不管指针 const 或引用修饰符如何 template
  • (gcloud.app.deploy) 错误响应:[13] 意外错误

    当我尝试将 Spring Boot 应用程序部署到谷歌云时 出现以下错误 gcloud app deploy Error Response 13 Unexpected Error 我正在使用 com google cloud tools a
  • 提交PHP后保留表单中的值

    我从控制器调用这些函数来获取表单和表单中的值 我的问题是 提交失败后如何保留表单中的值 我尝试过这样的事情
  • Apache Spark 在分区数量较少时内存不足

    我有一个Spark应用程序总是内存不足 集群有两个节点 RAM大约30G 输入数据大小大约几百GB 该应用程序是一个 Spark SQL 作业 它从 HDFS 读取数据并创建一个表并缓存它 然后执行一些 Spark SQL 查询并将结果写回
  • C libpcap API 提取 DNS 查询

    我正在尝试使用 libpcap api 从捕获的 DNS 数据包中提取 DNS 查询 但是我的结构一定有问题 在最后一次转换 使用结构问题 之后char name指针指向正确的地址 查询名称的开头 但它只包含 42 45 20 00 但应该
  • 向客户端发送数据(数据是一个有大原型的对象)

    想要更新一个使用迄今为止创建的所有聊天室列表登录的新客户端 假设我做了这样的事情 每次有人加入应用程序时 socket emit updateClient rooms rooms是一个对象 由许多组成room的实例Room对象本身很小 但有
  • 如何将数据导入rails?

    我有一个带有 User 类的 Rails 3 应用程序 以及一个我想要导入的制表符分隔的用户文件 如何在 Rails 控制台之外访问 Active Record 模型 以便我可以编写脚本来执行以下操作 require active reco
  • 叠加两个或多个位图以在 Picturebox 中显示 (C#)

    在我的 C 程序中 我有一个 Picturebox 我想在其中显示视频流 连续帧 我收到原始数据 然后将其转换为位图或图像 我可以一次显示一张图像 没有问题 重现视频流 现在我的问题是我想要合并 2 个或多个具有相同大小和 alpha 值
  • 如何使用 StAX XML 解析器捕获属性事件?

    我尝试使用 StAX XML 解析器解析 XML 文件 它给我START ELEMENT and END DOCUMENT事件但没有ATTRIBUTE事件 我怎样才能收到ATTRIBUTE使用 StAX 解析器的事件 My XML
  • 验证错误后,后续 ajax 请求从 UI 组件获取值,而不是从 Bean 获取值

    在我基于 JSF 2 的应用程序中 我有一个表单 其中包括 以及其他 UI 组件 一些复选框 在复选框上 我注册了 ajax 请求 在选中它们时会触发这些请求 ajax 请求实际上只会更新支持 bean 中另一个复选框的值 因此 另一个复选