jsf - 为可重用 JSF 弹出窗口中的有条件禁用字段提交空值

标签 jsf jsf-1.2 icefaces icefaces-1.8

我有一个用 IceFaces 1.8.x (JSF 1.2) 开发的弹出对话框。

该对话框是可重复使用的(用于帐户创建和修改),并且有一个带有 immediate = true 的取消按钮。 (以避免验证)。该对话框过去遇到过问题,重新打开对话框时会呈现旧值,但该问题现已按照指示修复 here (通过将 submittedValue 设置为 null 等)。

我现在面临的问题特定于有条件禁用输入字段( <ice:inputText> ),发生的情况如下:

  1. 首先打开弹出窗口(例如创建帐户)并且此字段 未禁用。
  2. 然后用户取消此对话框,并且由于我们已合并了上述修复 ( setSubmittedValue(null) ), submittedValue因为该字段设置为 null(以及其他字段)。
  3. 现在用户打开“修改帐户”对话框,该字段已禁用。在用户对表单进行任何更改之前,一切似乎都呈现良好。
  4. 当用户更改表单中的某些字段(例如名称)时,名称字段会按预期进行部分提交,但同时会为此禁用字段提交空值。

可以通过在相关字段的 setter 方法中添加空检查来解决此问题,但这不是该项目所需的解决方案 - 因为有多个地方可能需要这样做,但似乎并不需要这样做就像一件非常直观的事情。

所以我需要理解:

  1. 为什么这个禁用字段的 setter 在 第一名?并且也带有空值。设置者不是 调用任何其他启用的字段。
  2. 更重要的是,有没有办法解决这个问题(除了在 setter 中添加 null 检查之外)?

最佳答案

您必须使用rendered显示/隐藏对话框的属性

<ice:panelPopup modal="true" rendered="#{bean.enabled}">

重新打开对话框时,它会显示上一个实例的一些剩余值

解决方案(或解决方法)是使用 <c:if>而不是rendered属性,这样当对话框关闭时 DOM 会被完全销毁,当对话框打开时 DOM 会从头开始创建

<c:if test="#{bean.enabled}">
    <ice:panelPopup modal="true">
    ...
    </ice:panelPopup>
</c:if>

这样您甚至不需要修复来设置 submittedValue为空

关于jsf - 为可重用 JSF 弹出窗口中的有条件禁用字段提交空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27737903/

相关文章:

JSF 中的 Java 上传文件名土耳其语字符问题 - Primefaces

javascript - 命令按钮双操作 : save and redirect to other page

JSF:每次执行导航规则时如何执行一些代码?

java - :commandButton is not firing action if the h:form has enctype ="multipart/form-data"

java - ICEfaces:如何禁用某些表单的发送接收更新机制

jakarta-ee - 隐藏 .xhtml 源代码 - facelets/icefaces?

java - PrimeFaces 自动完成功能在更新后失去值(value)

java - 从 p :selectCheckboxMenu with a primefaces ajax event "change"? 取消选择最后一个选定项目时如何更新支持 bean

maven - 从 Tomcat 7 迁移到 8 时 Jsf 实现版本 NullPointerException

design-patterns - JSF MVC 设计问题