2012-06-06 64 views
1

我在這段代碼中出現錯誤,我被困在這一點。請幫幫我。Primefaces:轉換錯誤設置值'管理'爲'null轉換器'

getter和setter爲selectedRole,allRolesList被包括在代碼

Java代碼

private String selectedRole; 


List<String> allRolesList = new ArrayList<String>(); 

    if(!roleList.isEmpty()){ 
     isRolesPresent = true; 
     for(UserRole ur : roleList){ 
      allRolesList.add(ur.getRoleName().toString()); 

/* printing allRolesList results: [admin] */ 

System.out.print("allRolesList "+allRolesList); 

     } 
    }else{ 
     isRolesPresent = false; 
    } 

黃金面的代碼:

 <p:selectOneMenu id="role" value="#{usersDAO.selectedUser}" effect="fade" required="true" 
        requiredMessage="Role cannot be null"> 
      <f:selectItems value="#{usersDAO.allRolesList}" /> 
     </p:selectOneMenu> 

回答

3

#{usersDAO.selectedUser}顯然不是的鍵入String。 JSF不知道如何將String轉換爲User,因爲沒有轉換器已被註冊爲User類型,因此您收到了錯誤消息。

你通常需要創建一個自定義Converter爲此,在this answer解釋,但在給定的Java代碼,你實際上需要#{usersDAO.selectedRole}代替這已經是String型爲主。所以你不需要創建一個自定義的Converter

<p:selectOneMenu ... value="#{usersDAO.selectedRole}"> 

順便說一句,在名爲 「DAO」 託管bean是很奇怪的。你確定你沒有在一個類中混合概念或緊密耦合不同的職責(這會導致糟糕的可重用性/可維護性)嗎?

+0

我對「DAO」沒有明確的理解。你能解釋一下嗎? – Androider

+2

DAO類通常不是JSF管理的bean。它通常是JSF託管bean的一個屬性。 DAO類通常是一個包含所有數據庫交互代碼(如find(),list(),create(),save(),delete()等的類。這是絕對不能用作JSF託管bean。 – BalusC