JSF 转换器验证错误 : value is not valid for SelectOneMenu UIComponent

标签 jsf jpa

我在 requestScope 中使用 ManagedBean userHome,其中实体 'user' 将被持久化。 用户具有映射为 ManyToOne 关系的前导列。我的代码如下所示

@ManagedBean
@RequestScoped
public class UserHome {
    private User user = new User();
        // Getters and Setters

    private List<SelectItem> selectItems = new ArrayList<SelectItem>();

    public UserHome() {
        for(User user: availableLeaders) {
            selectItems.add(new SelectItem(user.getName(), user));
        }
    }

    public void persis();
}

用户.java

public class User {
    @Id
    @Column
    private Integer id;

    @Column
    privat String name;

    @ManyToOne
    private User leader;
}

我试图通过h:selectOneMenu获取这位领导者的值(value)像这样

<h:selectOneMenu value="#{userHome.user.leader}" converter="userConverter">
    <f:selectItems value="#{userHome.selectItems}"/>
</h:selectOneMenu>

我的转换器看起来像这样

@FacesConverter(forClass = User.class, value="userConverter")
public class UserConverter implements Converter {

    private  Map<String, User> userValues = new HashMap<String, User>();

    public UserConverter() {
        init();
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        return userValues.get(value);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        System.out.println("RAJASEKARAN "+value);
        return ((User)value).getName();
    }

    public void init() {
        UserHome userHome = new UserHome();
        for(User user:userHome.availableLeaders()) {
            userValues.put(user.getName(), user);
        }
    }
}

在尝试保存用户时,我收到错误 UserEdit:j_idt18: Validation Error: Value is not valid

最佳答案

添加到 BalusC 的答案:回发后,您需要确保 User 实例与您用于渲染所选项目的实例完全相同,或者为您的 User 类实现 equals。

代码没有显示 availableLeaders 来自何处,但如果这是按需从数据库获取的,那么转换器将不会转换为与列表中完全相同的对象实例JSF 通过 #{userHome.selectItems} 进行解析。

转换后,JSF 将使用 equals() 方法检查是否可以在该列表中找到转换后的实例。

关于JSF 转换器验证错误 : value is not valid for SelectOneMenu UIComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7131642/

相关文章:

jsf - 如何评估 JSF 复合组件中的 MethodExpressions

jsf - 使用 f :convertNumber 时设置小数点分隔符

java - Hibernate 不包括与另一个实体列表中的实体类型相同的子实体

eclipse 在此持久单元中定义名为 "ID_GENERATOR"的重复生成器

html - JSF 更改自动生成的元元素以允许使用 ssl 下载文件

javascript - JSF 页面中的 $.noConflict() 冲突

javascript - 打印数据表 - 新页面

java - 具有该名称 [<name>] 的 hibernate 参数不存在

java - 如何在 JPA Criteria API 中投影单个列?

mysql - 如果我们要传递的列表很大,则获取 mysql 中行数的最佳实践