2011-12-21 16 views
0

私はまだ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> 

と実装:ここ

答えて

0

は、あなたがこのようなあなたの<h:selectOneMenu

<f:ajax listener="#{bottleManagedBean.selectProducer}" />を追加JSF2

で正しくvalueChangeListenerのを使うべきかは、あなたの助けを事前に

感謝あなたのbeanのselectProducerValueChange ...

関連する問題