Я использую 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
. Что я делаю не так?
Edit:
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>
Thats not working. Я не могу бросить String в Przedmiot. Не означает ли значение присваиваемого значения уникальный идентификатор, как описано в ссылке, которую вы дали? – user2270884
ой, извините, вы получаете сообщение об ошибке при загрузке страницы или отправке на сервер? –
На submit. Проверка не выполняется. – user2270884