2014-09-26 52 views
2

大家好我试图从selectOneMenu组件中选择一个值。我使用的是primefaces 5和jsf 2选择一个菜单未将所选值设置为后端

我有一个selectOneMenu中显示的对象列表,当选择一个对象时,后端变量(具有相同类型的对象)应该注意该值。但是当我改变selectOneMenu中的值时,没有任何反应,我的意思是变量的setter方法没有被调用。

这是我selectOneMenu用于代码

<p:selectOneMenu id="selectRepositorio" 
    value="#{cadastroDocumentoControler.repositorio}"> 
    <f:selectItems 
     value="#{cadastroDocumentoControler.items}" /> 

    <p:ajax update="tree" event="change" /> 
</p:selectOneMenu> 

这是填充列表项get方法,和伟大工程,我可以看到 selectOneMenu用于所有元素

public List<SelectItem> getItems(){ 
      listarRepositorios(); 

    items.add(0, new SelectItem("", "choose one...")); 


     for(IRepositorio repositorio: repositorioList){  
      SelectItem si = new SelectItem(repositorio,repositorio.getNome());    
      items.add(si); 
     } 
     return items; 

} 

我repositorio变量,该变量应该选择所选值

private IRepositorio repositorio = EntityBeanFactory.getRepositorio(); 

个getter和setter

public void setRepositorio(IRepositorio repositorio) { 

    this.repositorio = repositorio; 
    System.out.println("valor after execute setRepositorio: "+repositorio); 

} 

public IRepositorio getRepositorio() { 
    System.out.println("value in the method getRepositorio: "+repositorio); 
    return repositorio; 

} 

主要问题是setter方法不叫,我din't有一个转换器,但没有印刷的转换器的错误,但我创建了一个,但还是没有任何反应

我的转换器

@FacesConverter(forClass=Repositorio.class) 
public class RepositorioConverter implements Converter { 
private IRepositorioDAO repositorioDAO = DAOFactory.getRepositorioDAO(); 


@Override 
public Object getAsObject(FacesContext context, UIComponent component, 
     String idRepositorio) { 
    if (idRepositorio==null || idRepositorio.trim().length()==0) { 
     return null; 
    } 

    return repositorioDAO.find(Integer.parseInt(idRepositorio)); 
} 

@Override 
public String getAsString(FacesContext context, UIComponent component, 
     Object value) { 
    IRepositorio repositorio = (IRepositorio) value; 
    Integer id = repositorio.getId(); 
    return id.toString(); 
} 


} 

最后我有我的@ManagedBean在@SessionScoped

预先感谢您的时间和答案

回答

3
  1. 如果使用了转换器,则必须使用IRepositorio列表,而不是使用SelectItem列表。
  2. p:selectOneMenu中使用自定义转换器时,应始终覆盖所涉及对象的equals()方法。对于你,你应该在类的repositorio上覆盖equal()。这是覆盖equal()方法的一个例子。
@Override 
public boolean equals(Object obj) { 
    if (obj == null) 
     return false; 
    if (!(obj instanceof IRepositorio)) 
     return false; 
    return ((ReferenceData) obj).getCode().equals(this.code); 
} 
+1

非常感谢的IRepositorio和 代替解决我的问题非常感谢 – 2014-09-26 15:03:45

+0

不客气。 – wittakarn 2014-09-26 15:09:18

相关问题