2013-05-17 1 views
1

을 변환하지 :Primefaces SelectManyMenu 변환기 나는 다음과 같은 주석을 사용하여 내 시스템 전반에 걸쳐 변환기를 사용하고

@FacesConverter(forClass = Group.class) 

이 SelectManyMenu를 제외하고 잘 작동 변환이 일어날 것 같지 않는 경우. SelectMenyMenu 확인 렌더링하지만 난 항목을 선택할 때이 문자열이 아닌 객체로 반환됩니다

<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> 

를 다음과 같이 내 SelectManyMenu가 정의됩니다. 내가

@FacesConverter(value = "groupConverter") 

내 변환기 주석을 변경하고 예상대로

converter="groupConverter" 

다음 작동을 포함하는 내 SelectManyMenu 태그를 변경하는 경우

.

JSF/Primefaces의 버그입니까?

내가 사용하고 있습니다 : Primefaces 3.5 톰캣 7 개

감사

+0

향후 JSF 관련 질문에서'[jsf]'태그를 추가하는 것이 좋습니다. – BalusC

답변

1

#{maintainMB.filteredLogicalGroups} 뒤에 형식이 일반적인 컬렉션 때 변환이 실패합니다 같은 List<Group>을 대신 일반 배열 등 Group[]로 .

이유는 간단합니다. 일반 유형 정보는 컴파일 타임에만 존재하고 런타임 중에는 완전히 부재합니다. EL/리플렉션은 컴파일 타임 동안 실행되지 않고 런타임 동안 만 실행되며 따라서보고되는 것은 모두 List입니다. 변환기가 없으면 HTTP 요청 매개 변수와 동일한 기본 유형 인 String의 항목을 보유한다고 가정합니다.

forClass을 사용하려면 List<Group> 속성을 Group[] 속성으로 변경해야합니다.

private Group[] filteredLogicalGroups; 

그렇지 않으면 명시 적으로 변환기를 명시 적으로 지정해야합니다.