2012-04-18 56 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