我有一个表单,该表单在编辑模式下需要呈现为只读值,在创建模式下需要呈现为下拉选择列表。
只读字段(在编辑模式下使用)使用<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>
下面是一个屏幕剪辑,显示了呈现为只读的字段(在编辑模式下)。单击“保存”按钮,我收到一条验证错误消息,表明该字段是必需的。
- 该值应该存在于支持 bean 中,因为显示的值来自同一个对象 (shiftDetailsController.selectedBusinessArea)。输出文本使用业务区域 ojbect 上的描述字段,选择字段使用 SelectItem 在标签中有描述的整个对象。
知道这是怎么发生的吗?我可以使用确定渲染状态的相同布尔值来设置所需的属性...这样只有在渲染时才需要它...但是由于这个问题是间歇性的...我不知道这是否真的有帮助.
我还验证了页面上没有其他组件无意中具有“业务区域”标签值(在验证消息中使用)来误导我哪个组件真正具有空值;这是唯一一个有“商业区”标签的。