JSF链式转换器

时间:2019-05-12 16:45:00

标签: spring jsf converters

根据此答案multiple converters on single value,不支持。因此,我尝试通过使用bean助手来构建链式转换器:

// Bean.java
public Converter chained(Converter... converters) {  return ...; } 

// view.xhtml
<p:inputText ... converter=#{bean.chained(aConverter, bConverter)} />

不幸的是,由于EL强制转换异常(代理不能强制转换为ConverterObject,所以这是不可能的)。这可能是由于在 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} />

0 个答案:

没有答案