簡體   English   中英

來自未呈現的組件的JSF驗證錯誤

[英]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>

下面是一個屏幕剪輯,顯示了在只讀模式下的字段(處於編輯模式)。 單擊“保存”按鈕,我收到驗證錯誤消息,該字段為必填字段。

  1. 該值應該在后備bean中,因為顯示的值來自同一對象(shiftDetailsController.selectedBusinessArea)。 輸出文本使用業務區域對象上的描述字段,選擇字段使用整個對象,其中SelectItem在標簽中具有描述。

字段呈現為只讀,並顯示驗證消息

任何想法這怎么可能發生? 我可以使用相同的布爾值來設置required屬性,該值確定渲染狀態...因此僅在渲染狀態時才需要...但是由於此問題是間歇性的...我不知道這是否真的有幫助。

我還驗證了頁面上的其他任何組件都不會無意中使用標簽值“ Business Area”(在驗證消息中使用了該值)來誤導我其中哪個組件確實具有空值; 這是唯一一個帶有“業務區域”標簽的標簽。

我弄清楚了這個問題正在發生什么。

在提交表單並收到驗證錯誤之前。 我進行了更改,導致控制兩個組件可見性的標志被顛倒了。

rendered="#{shiftDetailsController.canEditBusinessArea}"

換句話說,我在表單上執行的操作導致canEditBusinessArea更改值。 但是,我沒有重新渲染面板組(“ baGroup”)以使UI反映更新。

因此,當我提交表單時,在驗證階段就認為該組件是必需的……觸發驗證發生。 一旦將“ baGroup”添加到翻轉編輯業務區域標志的操作的reRender中,UI就開始反映該更新,並且所提交的表單具有該值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM