2012-04-18 58 views
1

我遵循这里的示例:Why does <h:inputText required="true"> allow blank spaces?创建一个“全局”转换器来修剪所有输入字段。但是,提交输入字段时不会调用转换器。为什么@FacesConverter(forClass = String.class)不起作用

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

但是当我更改为:

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

它的工作原理。

使用钻嘴鱼科2.1.7和3.2 PrimeFaces

+0

'inputValue'真的是'String'类型吗? – BalusC 2012-04-18 17:22:09

+0

就是这样..(以为它是String--它不是)。 Thx – BestPractices 2012-04-18 17:45:02

回答

0

这没有工作,因为inputValue将本来就不是String类型。一旦更改为键入字符串 - 它的工作。

3

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

+0

我直接使用#{inputValue}而不是#{controller.inputValue}尝试了它,并在请求范围内将'inputvalue'声明为managedbean。它没有工作。它应该总是声明为包装bean的属性,如#{controller.inputValue}? – arthur 2012-05-30 15:05:37

1

如果选中了绑定变量的类型为String和转换器仍然不会被调用,您还可以检查以下内容:

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

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