JSF2.2,primefaces 4,omnifaces 1.8.11。
在复合组件中,如何声明和使用转换器作为可选属性(也就是说它可能不被使用)。 例如
interface
<cc:attribute name="converter" required="false" default="" type="javax.faces.convert.Converter" />
...
implementation 1
----------------
<p:inputText value="#{cc.attrs.value}"
converter="#{cc.attrs.converter}" />
result
------
converter is not executed
implementation 2
----------------
<p:inputText value="#{cc.attrs.value}">
<f:converter converterId="#{cc.attrs.converter}" />
</p:inputText>
result
------
com.sun.faces.application.ApplicationImpl createConverter
SEVERE: JSF1006: Cannot instantiate converter of type
...
javax.faces.FacesException: Erreur d’expression : objet nommé «» non détecté
at com.sun.faces.application.ApplicationImpl.createConverter(...)
implementation 3
----------------
<p:inputText value="#{cc.attrs.value}">
<o:converter converterId="#{cc.attrs.converter}" />
</p:inputText>
result
------
same as f:converter
...
caller
<my:componentC value="#{customController.attribute}"
converter="#{customConverter}" />
<my:componentC value="#{customController.attribute}" />
答案 0 :(得分:1)
最后,我创建了一个由http://balusc.omnifaces.org/2006/09/debug-jsf-lifecycle.html
中的balusc定义的虚拟转换器默认转换器在复合组件
中定义如下<cc:attribute name="converter" required="false" default="dumyConverter"/>
<p:inputText value="#{cc.attrs.value}">
<f:converter converterId="#{cc.attrs.converter}" />
</p:inputText>
并使用,
<my:componentC value="#{customController.attribute}"
converter="customConverter" />
or
<my:componentC value="#{customController.attribute}" />