为什么 UISelectMany 不将 selectItems 转换为对象列表?
刚刚在 Java EE 文档 中找到了以下内容对于javax.faces.component.UISelectMany:
使用以下算法获取转换器:如果组件 有一个附带的转换器,请使用它。如果 不,寻找 ValueExpression 值(如果有)。价值表达 必须指向以下内容:
- 基元数组(例如 int[])。查询已注册
该原语的按类转换器 类型。- 对象数组(例如 Integer[] 或 String[])。查找
注册的按类转换器 底层元素类型。- java.util.Collection。不要转换值。
为了更好地理解,我想知道为什么如果 ValueExpression 是集合,则值不会被转换。
如果我想将转换器附加到 UISelectMany,我是否需要为 Collection 或底层元素类型编写转换器?
Just found the following in the Java EE Documentation for javax.faces.component.UISelectMany
:
Obtain the Converter using the following algorithm: If the component
has an attached Converter, use it. If
not, look for a ValueExpression for
value (if any). The ValueExpression
must point to something that is:
- An array of primitives (such as int[]). Look up the registered
by-class Converter for this primitive
type.- An array of objects (such as Integer[] or String[]). Look up the
registered by-class Converter for the
underlying element type.- A java.util.Collection. Do not convert the values.
For a better understanding, I would like to know why the values won't be converted if the ValueExpression is a Collection.
If I want to attach a converter to UISelectMany, do I need to write a converter for the Collection or for the underlying element type?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为 EL 不知道/不能知道通用列表类型,因为它在运行时丢失了。它只知道它是某物的集合。默认情况下,这些项目将被视为
String
。您需要为通用列表类型而不是集合编写转换器。另请参阅此相关答案。要了解有关 Java 泛型类型擦除的更多信息,请查看 泛型教程。
Because EL don't/can't know about the generic list type, because it got lost during runtime. All it knows is that it's a collection of something. The items will be treated as
String
by default. You need to write a converter for the generic list type, not for the collection. See also this related answer.To learn more about the type erasure of Java generics, check the generics tutorial.