2013-05-17 34 views
1

我使用我的整個系統中的轉換器,它使用了以下注釋:Primefaces SelectManyMenu轉換器轉換不

@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

由於

+0

在未來的JSF相關問題中,添加'[jsf]'標籤是明智的。 – BalusC

回答

1

當後面#{maintainMB.filteredLogicalGroups}類型是一個通用集合的轉換器將失敗,如List<Group>,代替普通的陣列,諸如Group[]

原因很簡單:通用類型信息僅在編譯時存在,並且在運行時完全不存在。 EL /反射在編譯期間不運行,但僅在運行期間運行,因此它看到的只是一個List。如果沒有轉換器,它會假定它保存缺省類型String的項目,與HTTP請求參數相同。

如果要使用forClass,則需要將List<Group>屬性更改爲Group[]屬性。

private Group[] filteredLogicalGroups; 

否則,您確實必須明確指定轉換器。