如果表單中有空的required
字段,它們會阻止我通過代碼設置值並根據當前用戶輸入隱藏/顯示其他字段。 我打破了我的問題給一個小例子:必填字段跳過對用戶輸入的反應
<h:inputText label="Name" value="#{req.test}" required="true"/>
<h:inputText label="Details" value="#{req.tests2}" readonly="true" required="true"/>
<h:selectBooleanCheckbox label="Hide field" value="#{req.bool1}"/>
<ui:fragment rendered="#{not req.bool1}">
<h:inputText label="Hidden" value="#{req.test3}" required="true"/>
</ui:fragment>
我required
場在我的形式,但如果用戶選擇第一組的複選框,我想隱藏字段出現,即使驗證失敗。我希望這些字段被標記爲無效,所以我不能立即使用。
的問題是,在處理的驗證,的renderResponse被稱爲在JSF生命週期。所以更新模型的值階段會被跳過,我無法對用戶輸入做出反應。
除此之外:如果我填與複選框選中所有required
領域(的形式將是有效的),並取消選中該複選框(一required
場"Hidden"
出現),我不能只是讓"Hidden"
通過檢查再次消失複選框,因爲"Hidden"
不能爲空作爲required
字段。 即使我說required="#{not req.bool1}"
這是行不通的,因爲該複選框值,因爲更新模型值階段被跳過從來沒有達到我的模型。
我們現在所做的是包裹面部上下文,以防止在設置標誌的驗證階段調用renderResponse()
。 (是的,很危險,是的,我確實需要更好的方法來做到這一點。)現在終於模型是最新的,但是: 必填字段仍然是空的,因爲由於某些原因,jsf決定required
字段不需要只要它們是空的/無效的,就可以從我的模型中獲得它們的價值。
- 我怎樣才能讓我的模型值出現在
required
領域? - 是否有簡單且適當的方式解決我的忽略無效狀態後繼續運行與 - 相 - 正確的問題,以外基本上防止
renderResponse()
發生?
將ajax支持添加到您的h:selectBooleanCheckbox UI元素:event =「click」render =「id」,並帶有渲染@form或fragment的父項 –
所以你的意思是我需要每次更改一些內容時更新表單在我的模型中更改必填字段值的字段?不幸的是,這是行不通的,因爲正如我所說由於某種原因,jsf認爲空的必填字段不需要從模型更新它們的值。其他領域顯示其價值,只是所需的領域保持空白。 – Neepsnikeep
但是,感謝與AJAX提示...我現在在代碼中這樣做。重置組件後,它會正確更新: 'UIInput ui = ...通過id獲取reqired字段; ui.resetValue(); Ajax.update(ui.getClientId());' 現在值顯示。這些字段仍然具有無效狀態,因爲在驗證階段,它們仍然是空的,但是很好。我現在可以忍受,我猜... 但是,這種解決方法真的是唯一的方法來標記字段無效,並仍然對其他用戶輸入作出反應?我的解決方案似乎太複雜了,不能做這樣一件基本的事情。 – Neepsnikeep