我有一個窗體,需要在編輯模式下呈現爲只讀值,並且在創建模式下作爲下拉選擇列表呈現。來自未呈現組件的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」(正在驗證消息中使用)誤導我確定哪個組件真正具有空值;這是唯一一個標有「商業區」的商標。