我仍然试图用jsf2,ejb3.1,cdi和glassfish编写应用程序。 我有有一个selectOneMenu用于由h:selectOneMenu/f:selectItems返回的值对于一个bean始终为空
<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的值总是空的形式。
我的FormBean
@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,我的应用程序从来没有调用过这个方法。
最后,我想提出一个整数(如我的bean的ID)和值吃得饱饱的,当我submit.1
所以......有什么不对?
在此先感谢您的帮助