Я все еще пытаюсь запрограммировать приложение с помощью jsf2, ejb3.1, cdi и glassfish. У меня есть форма, которые имеют selectOneMenuЗначение, возвращаемое функцией h: selectOneMenu/f: selectItems всегда равно null для компонента
<h:form prependId="false">
...
<f:validateBean>
...
<h:selectOneMenu value="#{bottleManagedBean.selectProducer}" id="selectproducerb"
validatorMessage="#{messages.bottleaddinvalideproducer}" immediate="true">
<f:converter binding="#{producerConverter}"/>
<f:selectItems value="#{bottleManagedBean.producerItems}" />
</h:selectOneMenu>
...
компонента selectItems хорошо showned, но когда я отправить форму значение bottleManagedBean.selectProducer всегда нуль.
Мой компонент формы
@Named("bottleManagedBean")
@RequestScoped
public class BottleManagedBean {
....
private List<Producer> producers;
public List<Producer> getProducers() {
if (producers == null) {
setProducers(producerService.list(Producer.class));
}
return producers;
}
public void setProducers(List<Producer> producers) {
this.producers = producers;
}
private Producer selectProducer;
public Producer getSelectProducer() {
return selectProducer;
}
private List<SelectItem> producerItems;
public List<SelectItem> getProducerItems() {
if (producerItems == null) {
producerItems = new ArrayList<SelectItem>();
for (Producer current : getProducers()) {
producerItems.add(new SelectItem(current.getId(), current.getName()));
}
}
return producerItems;
}
public void setProducerItems(List<SelectItem> producerItems) {
this.producerItems = producerItems;
}
...
Преобразователь
@Named("producerConverter")
public class ProducerConverter implements Converter {
@Inject
BusinessService<Producer> service;
private static Logger trace = Logger.getLogger(ProducerConverter.class.getCanonicalName());
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String id) {
try {
return service.findByID(Producer.class, Integer.parseInt(id));
} catch (NumberFormatException e) {
e.printStackTrace();
throw new ConverterException(e);
}
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
String asString = null;
if (o != null) {
asString = String.valueOf(o);
}
return asString;
}
}
Я пытался отладить приложение .Когда я отправить форму, приложение никогда не переходит в инкубаторе.
Я также попытался добавить valuechangelistener, и мое приложение никогда не вызывало этот метод.
Наконец, я попытался представить целое число (например, идентификатор моего боба) и значение хорошо заполнены, когда я submit.1
Итак ... что случилось?
Заранее спасибо за вашу помощь