JSF可选转换器在复合组件中

时间:2016-08-25 15:51:25

标签: converter jsf-2.2

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}" />

1 个答案:

答案 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}" />