Primefaces:为"空转换器"设置值"管理员"的转换错误



我在这个代码中遇到错误,我卡在这一点上。请帮助我。

getter 和 setter for 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,如本答案中所述,但基于给定的 Java 代码,您实际上需要#{usersDAO.selectedRole},而不是已经是String类型。因此,您无需创建自定义Converter

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

顺便说一句,名称中带有"DAO"的托管豆很奇怪。你确定你没有在单个类中混合概念或紧密耦合不同的职责(这会导致可重用性/可维护性差)吗?

最新更新