Java SelectOne菜单验证错误:值无效
我使用的是selectonemenu,如下所示: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
<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
中。使用getterother.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;
}