2012-10-15 41 views
0

我在我的項目中使用Hibernate,Spring和JSF(Primefaces)。我想用簡單的POJO(實體)創建一個選項列表。以下是我創建:Primefaces選擇列表,轉換器失敗

<p:pickList id="pickList" converter="#{groupConverter}" value="#{adminUsersMB.groups}" var="group" 
         itemLabel="#{group.name}" itemValue="#{group}" > 

         <f:facet name="sourceCaption">Available groups</f:facet> 
         <f:facet name="targetCaption">Users groups</f:facet> 

</p:pickList> 

我Converter是:

@RequestScoped 
@FacesConverter(forClass=Group.class, value="groupConverter") 
public class GroupConverter implements Converter { 

    @ManagedProperty(name="groupService", value="#{groupService}") 
    @Getter @Setter 
    GroupService groupService; 

    @Override 
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) { 
     try { 
      return groupService.getGroupByName(Integer.parseInt(arg2)); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) { 
     return ((Group) arg2).getId().toString(); 
    } 

} 
當然

我將我的自定義轉換到faces配置:

<converter> 
     <converter-id>groupConverter</converter-id> 
     <converter-class>pl.proedims.users.component.GroupConverter</converter-class> 
</converter> 

但是,當我提交表單,我得到了異常:

> SEVERE: javax.el.PropertyNotFoundException: /admin/user.xhtml @73,66 
> itemLabel="#{group.name}": Property 'name' not found on type java.lang.String 
+0

移除面配置的轉換器(因爲你已經使用的FacesConverter註釋),並嘗試 – Daniel

+0

沒了,還是同樣的錯誤 – Cichy

+0

什麼是adminUsersMB.groups的定義是什麼?似乎認爲該組是一個字符串。 – SteveS

回答

1

問題解決了。我只需要鍵入:

@Component("groupConverter") 
public class GroupConverter implements Converter { 

    @Autowired 
    GroupService groupService; 
    (...)