仅当验证失败时,输入字段才会保留以前的值

2024-01-10

我想到了一个奇怪的问题。我试图隔离问题,因此以下是我的简化代码。

public class MyBean {

  private List<Data> dataList;
  Data selectedData;

  public MyBean() {
    dataList = new ArrayList<Data>();
    dataList.add(new Data("John", 16));
    dataList.add(new Data("William", 25));
  }

  public List<Data> getDataList() {
    return dataList;
  }

  public void edit(Data data) {
    selectedData = data;
  }
  public void newData() {
    selectedData = new Data(null, null);
  }

  public Data getSelectedData() {
    return selectedData;
  }

  public class Data {
    String name;
    Integer age;
    Data(String name, Integer age) {
      this.name = name;
      this.age = age;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public Integer getAge() {
      return age;
    }
    public void setAge(Integer age) {
      this.age = age;
    }
  }
}

xhtml:

<rich:modalPanel id="pop">
  <h:form>
    Name: <h:inputText value="#{myBean.selectedData.name}" required="true" id="txtName"/><br/>
    Age : <h:inputText value="#{myBean.selectedData.age}" required="true" id="txtAge"/>
    <a4j:commandButton value="Save"/>
    <a4j:commandButton value="Close" onclick="Richfaces.hideModalPanel('pop');return false;"/>
    <br/>
    <rich:message for="txtName"/><br/>
    <rich:message for="txtAge"/>
  </h:form>     
</rich:modalPanel>

<h:form>
  <rich:dataTable value="#{myBean.dataList}" var="data">
    <rich:column>#{data.name}</rich:column>
    <rich:column>
      <a4j:commandLink value="Edit" action="#{myBean.edit(data)}" reRender="pop" oncomplete="Richfaces.showModalPanel('pop')"/>
    </rich:column>
  </rich:dataTable>
  <a4j:commandButton value="New" action="#{myBean.newData()}" reRender="pop" oncomplete="Richfaces.showModalPanel('pop')"/>
</h:form>

这是错误的路径:

  1. 加载页面
  2. 单击第一行中的“编辑”链接(弹出窗口显示)
  3. 在弹出窗口中,清除“年龄”字段,然后单击“保存”。(显示必填消息)
  4. 点击取消(不填写“年龄”字段)
  5. 单击第二个链接。
  6. 现在它显示不相关的数据(以前的数据)。 - 这就是问题
  7. 即使我单击“新建”按钮,它也会显示不正确的数据。

仅当弹出窗口中验证失败时才会发生这种情况。
有解决办法吗?


这个问题在JSF 2中也被认可并在以下答案中详细解释:发生验证错误后如何使用 PrimeFaces AJAX 填充文本字段? https://stackoverflow.com/questions/6642242/how-can-i-populate-a-text-field-using-primefaces-ajax-after-validation-errors-oc/6845800#6845800如果您使用 JSF 2,您可以使用 OmniFaces'ResetInputAjaxActionListener http://showcase.omnifaces.org/eventlisteners/ResetInputAjaxActionListener或 PrimeFaces'<p:resetInput> or resetValues="true" https://www.primefaces.org/showcase/ui/misc/resetInput.xhtml为了这。

到目前为止,您需要清除该状态EditableValueHolder http://docs.oracle.com/javaee/5/api/javax/faces/component/EditableValueHolder.html组件即将被 ajax 渲染,但不包含在 ajax-execute 中。要清除状态,在 JSF 2 中您可以使用便捷方法resetValue() http://docs.oracle.com/javaee/6/api/javax/faces/component/EditableValueHolder.html#resetValue%28%29为此,但这在 JSF 1.2 中不可用,您需要调用 4 个单独的方法setValue(null), setSubmittedValue(null), setLocalValueSet(false), setValid(true)清除状态。

要确定哪些组件将被 ajax 渲染,但没有被 ajax 执行,在 JSF 2 中您可以使用PartialViewContext方法,但这在 JSF 1.2 中不可用,因为 JSF 1.2 尚未标准化 ajax。您需要摆弄 RichFaces 特定的 ajax API 才能弄清楚这一点。我无法从头顶看出这一点,所以这里有一个启动示例,假设您已经知道需要清除的组件。想象一下弹出窗口中的表单有id="popForm"名称输入字段有id="nameInput",这是您如何在内部清除它的方法newData() method:

UIInput nameInput = (UIInput) context.getViewRoot().findComponent("popForm:nameInput");
nameInput.setValue(null);
nameInput.setSubmittedValue(null);
nameInput.setLocalValueSet(false);
nameInput.setValid(true);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅当验证失败时,输入字段才会保留以前的值 的相关文章

随机推荐

  • 查找矩阵内的最大和子=矩形[重复]

    这个问题在这里已经有答案了 可能的重复 获取总和最大的子矩阵 https stackoverflow com questions 2643908 getting the submatrix with maximum sum 给定一个正整数和
  • 如何根据不同的URL参数和请求值写入不同的数据库?

    我正在尝试创建一个 REST API 它选择要写入的适当的 mongo 数据库以及正确的集合 如何选择与参数同名的数据库以及集合 即将推出的 v0 6 Eve 将原生支持多个 Mongo 实例 新功能 支持多个 MongoDB 数据库和 或
  • 如何在 Mac OS 上使用 homebrew 将 postgresql 从 10.1 降级到 9.6 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的 Mac 上装有 postgresql 10 1 我的工作网站需要 9 6 才能在本地计算机上运行 找不到有关如何卸载或降级到 9 6
  • 如何解决此错误 (GWT)

    运行我的应用程序后出现此错误 编译过程中没有出现错误 另外 没有其他应用程序在运行 在端口 8888 警告 上启动 Jetty 失败 电子邮件受保护 cdn cgi l email protection 8888 java net Bind
  • 如何在java中为游戏实现双缓冲?

    因此 在我正在开发的游戏中 我有一个弹珠跟随鼠标 但当它这样做时 屏幕会闪烁 背景包括两个 jpeg 和 9 个矩形 我该如何进行双缓冲呢 这是主窗口的代码 Write a description of class Window here
  • R:分割数字字符串

    我正在尝试拆分 40 位数字的数字字符串 即拆分123456789123456789123456789 into 1 2 3 4 etc 很遗憾strsplit不起作用 因为它需要字符 并使用转换字符串as character不起作用 因为
  • Zappa/AWS - 电子邮件不会发送并且只是超时

    目前 我已经为我的交易电子邮件提供商 Postmark 尝试了普通的 Django SMTP 和一些不同的基于 api 的 Django 库 当我运行我的开发服务器时 一切都运行良好 通过 Postmark API 发送电子邮件没有任何问题
  • Get-ADPrincipalGroupMembership -Identity 不接受变量

    在几个不同的域中工作 这些域具有不同的命名模式 因此 我正在编写一个进入每个域的脚本 并检查它们的组成员身份 该脚本所做的第一件事是询问用户的姓氏 然后我用Get ADUser选择samaccountname并将其绑定到一个变量 samac
  • .NET 相当于 Java 资源包中的选择吗?

    在Java资源包中 我可能有以下资源包定义 en GB 英式英语 jobs search resultstr There 1 choice 0 are no jobs 1 is one job 1
  • 当有人点击特定链接时如何显示加载对话框?

    我确实有一个 URL 可以打开一个加载速度非常慢的网页 而且我无法控制它 我确实想在有人单击此 URL 时显示加载对话框 或者在发生这种情况时使用覆盖 div 阻止页面 注意 这与 ajax 相关的问题不是同一个问题 这是针对用户的正常 U
  • 如何在artifactory中配置更长的版本号

    我们的 jar 的版本号必须比 x x x 更长 我们宁愿需要 x x x x 来集成一些老式的自制机制 这是因为我们用 x x x 标记我们的软件 一旦我们交付给客户 就必须在此时准确地构建一个特定的 jar 以适应另一个后端 它与我们的
  • 无法将 SCSS 变量设置为 CSS 变量?

    考虑以下 SCSS color black 000000 body color color black 当用node sass编译时版本4 7 2 它会生成以下 CSS body color 000000 当我编译相同版本的SCSS时4 8
  • 如何加密用户数据,以便只有他们才能解密?

    我正在考虑创建一个 Web 应用程序 让人们输入文本 使用 SSL 连接 并且在保存到数据库之前将其加密 目标是只有用户才能解密它 您可以让用户输入密钥及其数据 并在他们想要查看数据时再次输入 而不是存储密钥 但这对用户来说会有点痛苦 但是
  • 32 位程序可以在 64 位操作系统上使用超过 4GB 的内存吗?

    在 64 位操作系统上运行的 32 位程序是否能够使用超过 4GB 的内存 如果可用 简短的回答是 是的 更长的答案取决于 硬件支持页面重新映射 这基本上为您的程序提供了一个将几个页面的窗口放入更大的内存区域的窗口 然而 该窗口应该由程序本
  • Azure 中的 SignalR 横向扩展适用于高频场景

    根据我对 Azure 中 SignalR 横向扩展的阅读 推荐的方法是使用 Azure ServiceBus 作为背板 但同时使用背板进行高频消息传递也存在限制 就限制章节而言SignalR 中的横向扩展 http www asp net
  • 了解 Java 中同步块与易失性变量的原子性、可见性和重新排序

    我试图理解volatile Java 并发实践 一书中的关键字 我比较synchronized关键字与volatile变量在三个方面 原子性 波动性和重新排序 我对此也有一些疑问 我在下面一一讨论过 1 可见性 同步 与 易变 书上说以下关
  • 从 X 射线图像中提取手骨

    我有一只手的 X 射线图像 我需要自动提取骨头 我可以使用不同的技术轻松分割手 但我需要得到骨头 而使用这些技术并没有帮助 有些骨头比其他骨头更亮 所以如果我使用阈值 其中一些骨头会消失 而另一些骨头会随着阈值上升而变得更清晰 我想也许我应
  • bookdown 错误“CTeX 字体集‘mac’在当前模式下不可用。”使用输出格式 pdf_book 和 pdf_document2 时

    我正在使用 bookdown RStudio tinyTex and pandoc用中文写一份报告 因为我需要使用交叉引用 所以我必须将输出格式设置为 pdf document2 但我有一个问题CTeX fontest 首先 这是 YAML
  • 在 Selenium Python 中执行鼠标操作

    我有以下脚本 from selenium import webdriver from selenium webdriver common by import By from selenium webdriver support ui imp
  • 仅当验证失败时,输入字段才会保留以前的值

    我想到了一个奇怪的问题 我试图隔离问题 因此以下是我的简化代码 public class MyBean private List