我使用selectOneMenu用於這樣的: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>
爲myBean:
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()
方法爲我的實體,所以我用eclipse只使用id字段生成它。然後我不得不將測試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>
那不行。我無法將字符串轉換爲Przedmiot。在您提供的鏈接中解釋過的價值不代表一個唯一的ID嗎? – user2270884
哦,很抱歉,您在載入頁面或提交給服務器時出錯? –
提交。驗證失敗。 – user2270884