在javax.faces.component.UISelectMany
的{{3}}中找到以下内容:
使用以下算法获取转换器:如果是组件 有一个附加的转换器,使用它。如果 不,寻找一个ValueExpression 价值(如果有的话)。 ValueExpression 必须指向以下内容:
- 一个基元数组(例如int [])。查看注册的
这个原语的by-class Converter 类型。- 一个对象数组(例如Integer []或String [])。查一下 已注册的转换器为 基础元素类型。
- java.util.Collection。请勿转换值。
为了更好地理解,我想知道为什么ValueExpression是Collection时不会转换值。
如果我想将转换器附加到UISelectMany,我是否需要为Collection或底层元素类型编写转换器?
答案 0 :(得分:1)
因为EL不知道/不能知道通用列表类型,因为它在运行时丢失了。它只知道它是某事的集合。默认情况下,这些项目将被视为String
。您需要为通用列表类型编写转换器,而不是为集合编写。另请参阅this related answer。
要了解有关Java泛型的类型擦除的更多信息,请查看generics tutorial。