我按照这里的示例: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
答案 0 :(得分:3)
只有当属性的类型是指定类的实例时,才会调用具有forClass
的转换器。在您的特定情况下,这只能表示类型#{controller.inputValue}
的{{1}} 不。
答案 1 :(得分:1)
如果您检查绑定变量的类型为String且转换器仍未被调用,您还可以检查以下内容:
如果输入组件封装在复合组件内,则可能有this issue。在这种情况下,转换器将无法正确调用,从而导致永远无法访问自定义方法。在输入组件上显式调用转换器可以解决这个问题。
如果您将value="someName"
和forClass="someClass"
都添加到@FacesConverter
注释中,则会忽略forClass属性。这是reported here。
答案 2 :(得分:0)
这不起作用,因为输入值实际上不是String类型。一旦改为String类型 - 就可以了。