Primefaces SelectManyMenu Converter не конвертируется

Я использую конвертер в моей системе, который использует следующую аннотацию:

@FacesConverter(forClass = Group.class)

это прекрасно работает, за исключением SelectManyMenu, где конвертация не происходит. Мой SelectManyMenu определяется следующим образом

<p:selectManyMenu value="#{maintainMB.filteredLogicalGroups}" var="g" showCheckbox="true">  
<f:selectItems value="#{maintainMB.logicalGroupFilterList}" var="group" itemLabel="#{group.name}" itemValue="#{group}" />  

<p:column>  
    <p:graphicImage value="image.png.xhtml" width="32"/>
</p:column>  

<p:column>  
    #{g.name} 
</p:column>  
</p:selectManyMenu>

SelectMenyMenu отображает нормально, но когда я выбираю элементы, они возвращаются в виде строки, а не объекта.

Если я изменю аннотацию конвертера на

@FacesConverter(value = "groupConverter")

и измените мой тег SelectManyMenu, чтобы включить

converter="groupConverter"

тогда это работает как ожидалось.

Это ошибка в JSF/Primefaces?

Я использую: Primefaces 3.5 Tomcat 7

Спасибо

1 ответ

Преобразователь потерпит неудачу, когда тип позади #{maintainMB.filteredLogicalGroups} является общей коллекцией, такой как List<Group>вместо простого массива, такого как Group[],

Причина проста: информация общего типа присутствует только во время компиляции и полностью отсутствует во время выполнения. EL/reflections не запускается во время компиляции, а только во время выполнения, и все, что он видит, таким образом, является List, Без конвертера предполагается, что он содержит элементы типа по умолчанию String, так же, как параметры HTTP-запроса.

Если вы хотите использовать forClassтогда вам нужно будет изменить List<Group> собственность на Group[] имущество.

private Group[] filteredLogicalGroups;

В противном случае вам действительно нужно явно указать конвертер.

Другие вопросы по тегам