2011-03-22 54 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

相关问题