[英]JSF Validation Error from Component that is not Rendered
我有一個表單,該表單的字段在編輯模式下需要呈現為只讀值,而在創建模式下則需要呈現為下拉選擇列表。
使用<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>
下面是一個屏幕剪輯,顯示了在只讀模式下的字段(處於編輯模式)。 單擊“保存”按鈕,我收到驗證錯誤消息,該字段為必填字段。
任何想法這怎么可能發生? 我可以使用相同的布爾值來設置required屬性,該值確定渲染狀態...因此僅在渲染狀態時才需要...但是由於此問題是間歇性的...我不知道這是否真的有幫助。
我還驗證了頁面上的其他任何組件都不會無意中使用標簽值“ Business Area”(在驗證消息中使用了該值)來誤導我其中哪個組件確實具有空值; 這是唯一一個帶有“業務區域”標簽的標簽。
我弄清楚了這個問題正在發生什么。
在提交表單並收到驗證錯誤之前。 我進行了更改,導致控制兩個組件可見性的標志被顛倒了。
rendered="#{shiftDetailsController.canEditBusinessArea}"
換句話說,我在表單上執行的操作導致canEditBusinessArea
更改值。 但是,我沒有重新渲染面板組(“ baGroup”)以使UI反映更新。
因此,當我提交表單時,在驗證階段就認為該組件是必需的……觸發驗證發生。 一旦將“ baGroup”添加到翻轉編輯業務區域標志的操作的reRender中,UI就開始反映該更新,並且所提交的表單具有該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.