2014-09-26 68 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

相關問題