2011-03-22 60 views
0

剛剛發現在Java EE Documentation以下爲javax.faces.component.UISelectMany爲什麼UISelectMany不會將selectItems轉換爲對象列表?

使用以下算法獲取轉換器:如果組件 有一個附加的轉換器,使用它。如果不是 ,請查找值爲 的ValueExpression(如果有)。所述ValueExpression 必須指向東西是:

  • 基元的陣列(如int [])。查找註冊的
    類別轉換器對於此原始類型 類型。
  • 對象數組(例如Integer []或String [])。查找
    註冊的類轉換器爲 基礎元素類型。
  • 一個java.util.Collection。不要轉換值。

爲了更好的理解,我想知道是什麼原因,如果ValueExpression是一個集合的值不會被轉換。

如果我想將轉換器附加到UISelectMany,是否需要爲集合或基礎元素類型編寫轉換器?

回答

1

因爲EL不知道通用列表類型,因爲它在運行時丟失了。所有它知道的是,它是東西的集合。這些項目默認爲String。您需要爲通用列表類型編寫轉換器,而不是集合。另見this related answer

要了解有關Java泛型的類型擦除的更多信息,請檢查generics tutorial

+0

Hi BalusC。感謝你及時的答覆。從給定的鏈接相關的答案說清楚,我會試試這種方式。泛型教程的鏈接看起來不對(它重定向到相關的答案)? – 2011-03-22 14:45:39

+0

不客氣。至於錯誤的鏈接,對不起,我的Ctrl + C沒有完成它的工作。我修好了它。 – BalusC 2011-03-22 14:47:35

+0

是的,它的工作原理!偉大的工作,BalusC!但我不得不重寫'getAsObject'和'getAsString'方法。否則會出現如下轉換錯誤:Error Rendering View [/benutzer/Create.xhtml] java.lang.ClassCastException:jpa.entities.Benutzergruppe無法在javax.faces.convert.EnumConverter.getAsString中轉換爲java.lang.Enum – 2011-03-22 15:19:57