我有一个用 IceFaces 1.8.x (JSF 1.2) 开发的弹出对话框。
该对话框是可重复使用的(用于帐户创建和修改),并且有一个带有 immediate = true
的取消按钮。 (以避免验证)。该对话框过去遇到过问题,重新打开对话框时会呈现旧值,但该问题现已按照指示修复 here (通过将 submittedValue
设置为 null 等)。
我现在面临的问题特定于有条件禁用输入字段( <ice:inputText>
),发生的情况如下:
- 首先打开弹出窗口(例如创建帐户)并且此字段 未禁用。
- 然后用户取消此对话框,并且由于我们已合并了上述修复 (
setSubmittedValue(null)
),submittedValue
因为该字段设置为 null(以及其他字段)。 - 现在用户打开“修改帐户”对话框,该字段已禁用。在用户对表单进行任何更改之前,一切似乎都呈现良好。
- 当用户更改表单中的某些字段(例如名称)时,名称字段会按预期进行部分提交,但同时会为此禁用字段提交空值。
可以通过在相关字段的 setter 方法中添加空检查来解决此问题,但这不是该项目所需的解决方案 - 因为有多个地方可能需要这样做,但似乎并不需要这样做就像一件非常直观的事情。
所以我需要理解:
- 为什么这个禁用字段的 setter 在 第一名?并且也带有空值。设置者不是 调用任何其他启用的字段。
- 更重要的是,有没有办法解决这个问题(除了在 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/