我有幾個組件具有特定的掩碼,驗證和轉換器。
首先,我定義了一個名爲「defaultText」這樣的成分:
</cc:interface>
<cc:attribute name="value"/>
<cc:editableValueHolder name="mycomp" targets="input"/>
</cc:interface>
<cc:implementation>
<p:inputMask id="input" value="#{cc.attrs.value}"/>
</cc:implementation>
(有我讓出來,以節省空間各種屬性)。看到editableValueHandler?它是你定義什麼組件來連接你的轉換器/驗證器的地方。
所以,我用我的 'defaultText' 組件來構建其它組分,例如, 'text.xhtml':
</cc:interface>
<cc:attribute name="value"/>
<cc:attribute name="mask"/>
<cc:attribute name="jsfConverter"/>
<cc:attribute name="jsfValidator"/>
</cc:interface>
<cc:implementation>
<foo:defaultText id="dt" value="#{cc.attrs.value}" mask="#{cc.attrs.mask}">
<c:if test="#{!empty cc.attrs.jsfConverter}">
<f:converter converterId="#{cc.attrs.jsfConverter}" for="mycomp"/>
</c:if>
<c:if test="#{!empty cc.attrs.jsfValidator}">
<f:validator validatorId="#{cc.attrs.jsfValidator}" for="mycomp"/>
</c:if>
</foo:defaultText>
</cc:implementation>
的<composite:editableValueHolder>
定義任何驗證/轉換器(<f:validator for="mycomp">
)將被關聯到<p:inputMask id="input">
。
然後我用我的文本組件上我的網頁:
<foo:text value="#{dummyMBean.text}" mask="99.999-99" jsfConverter="..." jsfValidator="..."/>