【问题标题】:JSF Validation Error from Component that is not Rendered来自未呈现的组件的 JSF 验证错误
【发布时间】:2012-01-21 05:27:15
【问题描述】:

我有一个表单,它有一个字段,在编辑模式下需要呈现为只读值,在创建模式下需要呈现为下拉选择列表。

只读字段(用于编辑模式)使用<h:outputText> 呈现为纯文本。在创建模式下,该字段被呈现为<h:selectOneListbox>,其必需属性为“true”。

它似乎大部分时间都像我预期的那样工作,但在编辑模式下偶尔会出现验证错误(未呈现选择列表框)。

这里是代码 sn-p,它定义了两个字段,并使用相同的布尔值设置了它们的渲染属性(只有一个字段否定了要切换的布尔值)。

<h:outputLabel id="lblBusinessArea" value="Business Area:" />
<h:panelGroup id="baGroup">
    <h:selectOneListbox id="businessAreaList" size="1"
            rendered="#{shiftDetailsController.canEditBusinessArea}" 
            converter="businessAreaConverter"
            value="#{shiftDetailsController.selectedBusinessArea}"
            label="Business Area"
            required="true">
        <f:selectItems id="businessAreaListItems" value="#{shiftDetailsController.businessAreas}" />
        <a4j:support id="businessAreaA4j" event="onchange"
            ajaxSingle="true" reRender="deploymentGroupList, positionPayGroupList, sapPremCodeList" />
    </h:selectOneListbox>
    <h:outputText id="businessAreaRO" 
         rendered="#{!shiftDetailsController.canEditBusinessArea}" 
         value="#{shiftDetailsController.selectedBusinessArea.busAreaDesc}" />
</h:panelGroup>

下面是一个屏幕剪辑,显示了呈现为只读的字段(在编辑模式下)。单击“保存”按钮,我收到一条验证错误消息,提示该字段是必填项。

  1. 该值应该存在于支持 bean 中,因为显示的值来自同一个对象 (shiftDetailsController.selectedBusinessArea)。输出文本使用业务区域对象上的描述字段,选择字段使用 SelectItem 在标签中具有描述的整个对象。

知道这是怎么发生的吗?我可以使用确定渲染状态的相同布尔值来设置所需的属性...这样只有在渲染时才需要它...但是由于这个问题是间歇性的...我不知道这是否真的有帮助.

我还验证了页面上没有其他组件无意中具有“业务区域”的标签值(在验证消息中使用)来误导我哪个组件真正具有空值;这是唯一一个有“商业区”标签的。

【问题讨论】:

    标签: validation richfaces jsf-1.2


    【解决方案1】:

    我知道这个问题是怎么回事。

    在提交表单并收到验证错误之前。我所做的更改导致控制两个组件可见性的标志被反转。

    rendered="#{shiftDetailsController.canEditBusinessArea}"
    

    换句话说,我在表单上所做的是导致canEditBusinessArea 更改值。但是,我没有重新渲染面板组(“baGroup”)以使 UI 反映更新。

    因此,当我的表单提交时,验证阶段的组件被视为是必需的...触发验证发生。一旦我将“baGroup”添加到翻转编辑业务区域标志的操作的重新渲染中,UI 就开始反映更新并且提交的表单具有值。

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 2013-06-13
      • 2013-09-16
      • 1970-01-01
      • 2010-12-30
      • 2019-04-06
      • 2014-05-07
      • 2014-04-11
      • 2013-04-08
      相关资源
      最近更新 更多