我有一个窗体,需要在编辑模式下呈现为只读值,并且在创建模式下作为下拉选择列表呈现。来自未呈现组件的JSF验证错误
只读字段(用于编辑模式)使用<h:outputText>
呈现为纯文本。在创建模式下,该字段呈现为<h:selectOneListbox>
,其中必须具有“true”属性。
它似乎工作正如我所期望的大部分时间,但偶尔我会在编辑模式下(选择列表框未呈现)时出现验证错误。
下面是代码片段,这两个字段都使用相同的布尔值设置了呈现的属性(只有一个字段否定要切换的布尔值)。
<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>
下面是屏幕截图,显示呈现为只读状态的字段(处于编辑模式)。点击“保存”按钮,我收到验证错误消息,说明该字段是必需的。
- 由于显示的值来自同一对象(shiftDetailsController.selectedBusinessArea),因此该值应该位于backing bean中。输出文本使用业务区域ojbect上的description字段,select字段使用SelectItem在标签中具有描述的整个对象。
任何想法如何这可能是发生?我可以使用确定呈现状态的相同布尔值来设置必需的属性...因此它只在呈现时才需要......但是由于此问题是间歇性的......我不知道这真的会有帮助。
我还验证了页面上的其他组件无意中有一个标签值“Business Area”(正在验证消息中使用)误导我确定哪个组件真正具有空值;这是唯一一个标有“商业区”的商标。