2012-04-18 6 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"/> 

それが動作します。 inputValueではString型で、実際にはなかったので、このdidntの仕事クロサギ科2.1.7とPrimeFaces 3.2

+0

'inputValue'は実際には' String'型ですか? – BalusC

+0

それはそれだった。(それはストリングだと思った。 Thx – BestPractices

答えて

0

を使用して

。 String型に変更されると、うまくいきました。

3

forClassのコンバータは、プロパティの型が指定されたクラスのインスタンスである場合にのみ呼び出されます。あなたの特定のケースでは、これは、がStringのではないでないことを意味します。

+0

#{controller.inputValue}の代わりに#{inputValue}で直接試してみましたが、リクエストスコープ内のマネージドビーンとして 'inputvalue'が宣言されています。それはうまくいかなかった。 #{controller.inputValue}のようなラッパーBeanのプロパティとして常に宣言されているはずですか? – arthur

1

あなたがバインドされた変数はString型であると、コンバータはまだ呼ばれないことを確認した場合、あなたはまた、次のことを確認してください可能性があります

  • 入力コンポーネントは、複合コンポーネント内に封入されている場合は、あなたはthis issueかもしれません。その場合、コンバータは正しく呼び出されず、カスタムメソッドに決して到達できません。入力コンポーネントで明示的にコンバータを呼び出すと、これが解決されます。

  • value="someName"forClass="someClass"の両方を@FacesConverterアノテーションに追加すると、forClass属性は無視されます。これはreported hereです。

関連する問題