私はまだjsf2、ejb3.1、cdiおよびglassfishを使ってアプリケーションをプログラミングしようとしています。 私はselectOneMenuh:selectOneMenu/f:selectItemsによって返される値は、常にBeanにとって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>
...
選択項目コンポーネントのを持っている形を持ってはよくshownedですが、私はフォームを送信する際bottleManagedBean.selectProducerの値は常にnullです。
マイフォームBean
@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;
}
...
私はフォームを送信.Whenアプリをデバッグしようとしたコンバータ
@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;
}
}
、アプリケーションがセッターに行くことはありません。
また、私はvaluechangeristenerを追加しようとしましたが、私のアプリケーションは決してこのメソッドを呼ばなかったのです。
は最後に、私は整数(例えば。私の豆のID)を提出しようとしましたが、私はそう
をsubmit.1時に値がうまく満たされて、...何が悪いですの?
<h:selectOneMenu value="#{bottleManagedBean.selectProducerValueChange}" id="selectproducerb"
validatorMessage="#{messages.bottleaddinvalideproducer}">
<f:ajax listener="#{bottleManagedBean.selectProducerValueChange}" />
<f:converter binding="#{producerConverter}"/>
<f:selectItems value="#{bottleManagedBean.producerItems}" />
</h:selectOneMenu>
と実装:ここ