Java SelectOne菜单验证错误:值无效

Java SelectOne菜单验证错误:值无效,java,hibernate,jsf,Java,Hibernate,Jsf,我使用的是selectonemenu,如下所示: <h:selectOneMenu value="#{MyBean.zajecie.przedmiot}"> <f:selectItems value="#{MyBean.przedmioty}" var="p" itemLabel="#{p.nazwa}" itemValue="#{p}" /> <f:converter converterId="converter.Przedmiot

我使用的是selectonemenu,如下所示:

<h:selectOneMenu value="#{MyBean.zajecie.przedmiot}">
    <f:selectItems value="#{MyBean.przedmioty}" var="p"
        itemLabel="#{p.nazwa}" itemValue="#{p}" />
    <f:converter converterId="converter.PrzedmiotConverter" />
</h:selectOneMenu>
selectonemenu组件正在按预期填充。当我提交时,它显示
验证错误:值无效
。我知道我需要一个适合我的实体的
equals()。然后我不得不更改测试
getClass()!=obj.getClass()
obj实例的Przedmiot
,因为
obj.getClass()
返回如下内容:
Przedmiot\u$$\ ujavassist\u1
。我不确定这是否相关,因为毕竟
obj
被证明是
null
。我做错了什么

编辑:

MyBean是可视范围的

有趣的是,使用相同转换器的类似代码可以在应用程序的其他部分工作。不同之处在于,在工作部件中,我只是查看类型列表
Przedmiot
,并以另一种方式获取它

@PostConstruct
private void init() {
    student = studentDao.findByLogin(ra.getUser());
}

<h:selectOneMenu value="#{otherBean.przedmiot}">
    <f:selectItems value="#{otherBean.student.grupa.przedmiots}" var="p" 
        itemLabel="#{p.nazwa}" itemValue="#{p}" />
    <f:converter converterId="converter.PrzedmiotConverter" />
</h:selectOneMenu>
@PostConstruct
私有void init(){
student=studentDao.findByLogin(ra.getUser());
}

在转换器中:
整数.parseInt(值)
,并在
中解决它。当然,它的
equals()
方法写得很糟糕。 首先,我的问题有一个错误
obj
未解析为null,但
other.przedmioid
解析为null。对不起。看看eclipse生成的方法:

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (!(obj instanceof Przedmiot))//changed this from (getClass() != obj.getClass())
        return false;
    Przedmiot other = (Przedmiot) obj;
    if (przedmiotId == null) {
        if (other.przedmiotId != null)
            return false;
    } else if (!przedmiotId.equals(other.przedmiotId))
        return false;
    return true;
}

问题出现在
other.przedmioid
中。使用getter
other.getprzedmioid()获取值时,它不再解析为null。

这不起作用。我不能把绳子拉到绳子上。该值不是如您提供的链接中所解释的那样表示唯一的ID吗?哦,很抱歉,您在加载页面或提交到服务器时出错?提交时。验证失败。当调试时,出现错误时,行号(对不起,我的英语不好)?当我单击提交按钮时,验证错误消息显示在h:messages组件中。
@PostConstruct
private void init() {
    student = studentDao.findByLogin(ra.getUser());
}

<h:selectOneMenu value="#{otherBean.przedmiot}">
    <f:selectItems value="#{otherBean.student.grupa.przedmiots}" var="p" 
        itemLabel="#{p.nazwa}" itemValue="#{p}" />
    <f:converter converterId="converter.PrzedmiotConverter" />
</h:selectOneMenu>
@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (!(obj instanceof Przedmiot))//changed this from (getClass() != obj.getClass())
        return false;
    Przedmiot other = (Przedmiot) obj;
    if (przedmiotId == null) {
        if (other.przedmiotId != null)
            return false;
    } else if (!przedmiotId.equals(other.przedmiotId))
        return false;
    return true;
}