我正在使用这样的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>
我的豆:
private Zajecie zajecie;//+set get
private List<Przedmiot> przedmioty;//+set get
@PostConstruct
private void init() {
przedmioty = przedmiotDao.findByLogin("login");
zajecie = new Zajecie();
}
和转换器方法:
public Object getAsObject(FacesContext context, UIComponent component, String value) {
PrzedmiotDao przedmiotDao = DaoFactory.getInstance().getPrzedmiotDao();
Przedmiot przedmiot = przedmiotDao.findById(Przedmiot.class, Integer.parseInt(value));
return przedmiot;
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
Przedmiot przedmiot = (Przedmiot) value;
String idAsString = String.valueOf(przedmiot.getPrzedmiotId());
return idAsString;
}
selectonemenu 组件正在按预期填充。当我提交时,它显示Validation Error: Value is not valid
. 我知道equals()
我的实体需要一个合适的方法,所以我只使用 id 字段用 eclipse 生成了它。然后我不得不将测试更改getClass() != obj.getClass()
为obj instanceof Przedmiot
因为obj.getClass()
返回了这样的内容:Przedmiot_$$_javassist_1
。我不确定这是否相关,因为毕竟obj
证明是null
. 我究竟做错了什么?
编辑:
MyBean 是 ViewScoped。
有趣的是,使用相同转换器的类似代码可以在应用程序的其他部分工作。不同之处在于,在工作部分我只是查看类型列表,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>