为什么UISelectMany不将selectItems转换为对象列表?

时间:2011-03-22 14:24:03

标签: jsf jsf-2

javax.faces.component.UISelectMany的{​​{3}}中找到以下内容:

  

使用以下算法获取转换器:如果是组件   有一个附加的转换器,使用它。如果   不,寻找一个ValueExpression   价值(如果有的话)。 ValueExpression   必须指向以下内容:

     
      
  • 一个基元数组(例如int [])。查看注册的
      这个原语的by-class Converter   类型。
  •   
  • 一个对象数组(例如Integer []或String [])。查一下   已注册的转换器为   基础元素类型。
  •   
  • java.util.Collection。请勿转换值。
  •   

为了更好地理解,我想知道为什么ValueExpression是Collection时不会转换值。

如果我想将转换器附加到UISelectMany,我是否需要为Collection或底层元素类型编写转换器?

1 个答案:

答案 0 :(得分:1)

因为EL不知道/不能知道通用列表类型,因为它在运行时丢失了。它只知道它是某事的集合。默认情况下,这些项目将被视为String。您需要为通用列表类型编写转换器,而不是为集合编写。另请参阅this related answer

要了解有关Java泛型的类型擦除的更多信息,请查看generics tutorial