2013-05-22 30 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

相关问题