Primefaces:转换错误设置值'管理'为'null转换器'

问题描述:

我在这段代码中出现错误,我被困在这一点。请帮帮我。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> 

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