为什么@FacesConverter(forClass = String.class)不起作用

时间:2012-04-18 16:50:20

标签: jsf-2

我按照这里的示例:Why does <h:inputText required="true"> allow blank spaces?创建了一个“全局”转换器来修剪所有输入字段。但是,在提交输入字段时不会调用转换器。

@FacesConverter(forClass=String.class) 
... 
<p:inputText value="#{controller.inputValue}"/> 

但是当我改为:

@FacesConverter("StringTrimmer") 
... 
<p:inputText value="#{controller.inputValue}" converter="StringTrimmer"/> 

它有效。

使用Mojarra 2.1.7和PrimeFaces 3.2

3 个答案:

答案 0 :(得分:3)

只有当属性的类型是指定类的实例时,才会调用具有forClass的转换器。在您的特定情况下,这只能表示类型#{controller.inputValue}的{​​{1}}

答案 1 :(得分:1)

如果您检查绑定变量的类型为String且转换器仍未被调用,您还可以检查以下内容:

  • 如果输入组件封装在复合组件内,则可能有this issue。在这种情况下,转换器将无法正确调用,从而导致永远无法访问自定义方法。在输入组件上显式调用转换器可以解决这个问题。

  • 如果您将value="someName"forClass="someClass"都添加到@FacesConverter注释中,则会忽略forClass属性。这是reported here

答案 2 :(得分:0)

这不起作用,因为输入值实际上不是String类型。一旦改为String类型 - 就可以了。