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

时间:2015-01-02 05:48:58

标签: jsf jsf-1.2 icefaces icefaces-1.8

我在IceFaces 1.8.x(JSF 1.2)中开发了一个弹出对话框。

该对话框可重复使用(用于创建帐户和修改),并且具有immediate = true的取消按钮(以避免验证)。此对话框在过去遇到了问题,在重新打开对话框时呈现旧值,但现在该问题已按照指示heresubmittedValue设置为null等)修复。< /强>)。

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

  1. 首先打开弹出窗口(例如创建帐户)和此字段 未被禁用。
  2. 用户随后取消此对话框,并且由于我们已合并上述修复程序(setSubmittedValue(null)),此字段的submittedValue将设置为null(以及其他字段)。
  3. 现在,用户打开“修改帐户”对话框,此字段中的IS已禁用。在用户对表单进行任何更改之前,所有内容似乎都会正常呈现。
  4. 当用户更改表单中的某个字段(例如名称)时,会按预期对名称字段进行部分提交,但同时为此禁用字段提交空值。
  5. 这个问题可以通过在相关字段的setter方法中添加空检查来解决,但这不是项目所需的解决方案 - 因为有多个地方可能需要这些并且看起来不像就像一个非常直观的事情。

    所以我需要明白:

    1. 为什么在此禁用字段中调用此禁用字段的setter 第一名?并且具有空值。二传手不是 要求任何其他已启用的字段。
    2. 更重要的是,有没有办法解决这个问题(除了在setter中添加null check)?

1 个答案:

答案 0 :(得分:2)

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

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

当重新打开对话框时,它会从前一个实例

中得到一些残余值

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

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

这样你甚至不需要修复就可以将submittedValue设置为null