2013-05-22 31 views
0

在我的實施中,選擇菜單顯示爲填充值。但是,如果我從菜單中選擇了任何項目,選擇菜單不會設置值並重置爲默認值。無法從SelectOneMenu中選擇任何項目

轉換器:

package com.papar.common.converter; 

    import javax.faces.application.FacesMessage; 
    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.RequestScoped; 
    import javax.faces.component.UIComponent; 
    import javax.faces.context.FacesContext; 
    import javax.faces.convert.Converter; 
    import javax.faces.convert.ConverterException; 
    import javax.inject.Inject; 

    import org.springframework.stereotype.Component; 

    import com.papar.common.domain.Manufacturer; 
    import com.papar.common.repository.ManufacturerRepository; 

    @Component 
    @ManagedBean 
    @RequestScoped 
    public class ManufacturerConverter implements Converter { 

     @Inject 
     private ManufacturerRepository repository; 

     @Override 
     public Object getAsObject(FacesContext context, UIComponent component, String value) { 
      if (value == null || value.isEmpty()) { 
       return null; 
      } 

      try { 
       return repository.getById(Integer.valueOf(value)); 
      } catch (Exception e) { 
       throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to User", value)), e); 
      } 
     } 

     @Override 
     public String getAsString(FacesContext context, UIComponent component, Object value) { 
      if (!(value instanceof Manufacturer)) { 
       return null; 
      } 

      return String.valueOf(((Manufacturer) value).getId()); 
     } 

     // ... 
    } 

JSF:

 <p:column>Manufacturer</p:column> 
           <p:column> 
            <p:selectOneMenu converter="com.apt.papar.converter.ManufacturerConverter" value="#{brandBean.manufacturer}"> 
            <f:selectItem itemLabel="Select Manufacturer" itemValue="-1"/> 
            <f:selectItems value="#{brandBean.manufacturers}" var="manufacturer" itemLabel="#{manufacturer.name}" itemValue="#{manufacturer.id}"/> 

            </p:selectOneMenu> 

           </p:column> 

請幫助..

回答

2

修復下面提到的三個問題:

  1. 你有春天,JSF和CDI註釋一起。堅持其中之一;
  2. converter =「com.apt.papar.converter.ManufacturerConverter」預計由@FacesConverter註釋設置的轉換器的ID:因爲您不使用它,您應該改爲使用與對象綁定:converter="#{manufacturerConverter}";
  3. itemValue<f:selectItems>標記應該指向一個對象,而不是它的id:itemValue="#{manufacturer},否則你的轉換器的使用將是錯誤的。

修復後,您的<p:selectOneMenu>將工作。

+0

+1。它的工作..非常感謝.. – Shashi

+1

不客氣! – skuntsel

相關問題