我正在寫一個包含<h:selectManyMenu>
的複合成分,我想,讓這個組件的客戶端通過將<f:validator>
和<f:converter>
的標籤,我的複合成分的標籤的兒童提供驗證器和轉換器。在我複合材料的界面部分,我有JSF 2.2複合組件EditableValueHolder的
<composite:editableValueHolder name="select-input" targets="select-many" />
,並實現部分:
<h:selectManyMenu id="select-many" styleClass="hidden select-input" value="#{cc.attrs['value']}" binding="#{cc.inputComponent}">
<composite:insertChildren />
</h:selectManyMenu>
終於用法:
<cwi:selectManyMenu id="select-many-menu" value="#{selectManyBean.selectedItems}">
<f:converter converterId="converter.testItem" for="select-many" />
<f:validator validatorId="validator.testItem" for="select-input" />
<f:selectItems value="#{selectManyBean.possibleItems}" var="item" itemValue="#{item}" itemLabel="#{item.description}" />
</cwi:selectManyMenu>
問題既不驗證,也沒有轉換器被調用。我也有驗證器和轉換器類,每個類分別註釋爲@FacesValidator('validator.testItem')
和@FacesConverter("converter.testItem")
。他們被正確地拾起,因爲如果我移動複合材料部件內<f:validator>
和<f:converter>
標籤,下面<composite:insertChildren>
一切工作正常,但我寧願這些暴露給客戶比他們硬編碼。有什麼關於insertChildren在使用editableValueHolder時的工作方式?爲了達到這個目的,我可以將轉換器和驗證器ID作爲接口的一部分,但是將屬性傳遞給轉換器和驗證器失去了一些靈活性。
哪個JSF IMPL /版本?在將中的「顯而易見的」錯誤修正爲一個你已經在'中正確使用的值之後,它對Mojarra 2.2.12中的我來說工作得很好。 –
BalusC