根据此答案multiple converters on single value,不支持。因此,我尝试通过使用bean助手来构建链式转换器:
// Bean.java
public Converter chained(Converter... converters) { return ...; }
// view.xhtml
<p:inputText ... converter=#{bean.chained(aConverter, bConverter)} />
不幸的是,由于EL强制转换异常(代理不能强制转换为Converter
或Object
,所以这是不可能的)。这可能是由于在 faces-config.xml 中注册的SpringBeanFacesELResolver
引起的。
第二次尝试是从组件属性构建@FacesConverter
,但是UIComponent#getAttributes()
不包含值为@Component
注入的属性。
<f:attribute name="converter_a" value="#{aConverter}" />
因此,我唯一想到的方法是提供属性转换器ID并尝试以某种方式在“ ChainingConverter”实例中找到它()。
您知道如何通过ID查找转换器吗?
更新
我还尝试将转换器方法传递为MethodExpression
:
// Bean.java
public Converter chained(MethodExpression... expressions) { return ...; }
// view.xhtml
<p:inputText ... converter=#{bean.chained(aConverter.getAsString, bConverter.getAsString)} />
在这种情况下,{ConverterClass} does not have the property 'getAsString'
(似乎只有在具有方法签名属性的组合中,才可以传递表达式)。
更新
我结束了在后备bean中构建转换器的解决方案:
// Bean.java
public Converter getConverter() { return ...; }
// view.xthml
<p:inputText ... converter=#{bean.converter} />