我在这个代码中遇到错误,我卡在这一点上。请帮助我。
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"的托管豆很奇怪。你确定你没有在单个类中混合概念或紧密耦合不同的职责(这会导致可重用性/可维护性差)吗?