2014-02-25 37 views
0

嗨,我有以下問題,我有表中顯示公司的列表,我想用suach篩選該列表,用戶只能看到列表由他創建的公司。 繼承人的表jsf如何根據給定的ID篩選結果

<h:dataTable value="#{empresaController.items}" var="item" border="0" cellpadding="2" cellspacing="0" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px"> 
<h:column> 
    <h:graphicImage rendered="#{not empty item.logo}" 
        value="/resources/images/#{item.logo}" styleClass="covers"/> 
</h:column> 
<h:column> 
    <h:graphicImage rendered="#{not empty item.imagen}" 
        value="/resources/images/#{item.imagen}" styleClass="covers"/> 
</h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="#{bundle.ListEmpresaTitle_nombre}"/> 
     </f:facet> 
     <h:outputText value="#{item.nombre}"/> 
    </h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="#{bundle.ListEmpresaTitle_descripcion}"/> 
     </f:facet> 
     <h:outputText value="#{item.descripcion}"/> 
    </h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="#{bundle.ListEmpresaTitle_rubroidRubro}"/> 
     </f:facet> 
     <h:outputText value="#{item.rubroidRubro.nombre}"/> 
    </h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="&nbsp;"/> 
     </f:facet> 
     <h:commandLink action="#{empresaController.prepareView}" value="#{bundle.ListEmpresaViewLink}"/> 
     <h:outputText value=" "/> 
     <h:commandLink action="#{empresaController.prepareEdit}" value="#{bundle.ListEmpresaEditLink}"/> 
     <h:outputText value=" "/> 
     <h:commandLink action="#{empresaController.destroy}" value="#{bundle.ListEmpresaDestroyLink}"/> 
    </h:column> 
</h:dataTable> 

,這裏是我的控制器:

private FacesContext facesContext = FacesContext.getCurrentInstance(); 
private UsuarioController usuarioController = (UsuarioController) facesContext.getApplication().evaluateExpressionGet(facesContext, "#{usuarioController}", UsuarioController.class); 



    private EmpresaFacade getFacade() { 
    return ejbFacade; 
} 

public PaginationHelper getPagination() { 
    if (pagination == null) { 
     pagination = new PaginationHelper(10) { 
      @Override 
      public int getItemsCount() { 
       return getFacade().count(); 
      } 

      @Override 
      public DataModel createPageDataModel() { 
       return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()})); 
      } 
     }; 
    } 
    return pagination; 
} 

public SelectItem[] getItemsAvailableSelectMany() { 
    return JsfUtil.getSelectItems(ejbFacade.findAll(), false); 
} 

public SelectItem[] getItemsAvailableSelectOne() { 
    return JsfUtil.getSelectItems(ejbFacade.findAll(), true); 
} 

public SelectItem[] getItemsAvailableByUser() { 
    List<Empresa> empByUsuarios = new ArrayList<Empresa>(); 

    for(Empresa emp: ejbFacade.findAll()){ 
     if(emp.getUsuarioidUsuario().getIdUsuario() 
       == usuarioController.getSelected().getIdUsuario()){ 
      empByUsuarios.add(emp); 
     } 
    }  
    return JsfUtil.getSelectItems(empByUsuarios, false); 
} 

如何調用getItemsAvailableByUser當用戶希望看到列表?

非常感謝您

+0

嘗試用''.. 。/>'。當用戶希望列表之間進行切換,嗯,這是一個託管bean,所以在設置屬性存在,並添加另一種方法,它返回(取決於從屬性)無論是一個或另一個列表。 –

+0

@ L-Ray沒有關注你,你能否激動一下? –

回答

0

我解決它

public PaginationHelper getPagination() { 
    if (pagination == null) { 
     pagination = new PaginationHelper(10) { 
      @Override 
      public int getItemsCount() { 
       return getItemsAvailableByUser().length; 
      } 

      @Override 
      public DataModel createPageDataModel() { 
       return new ListDataModel(findRangeByUser(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()})); 
      } 
     }; 
    } 
    return pagination; 
} 
public SelectItem[] getItemsAvailableByUser() { 
    List<Empresa> empByUsuarios = new ArrayList<Empresa>(); 

    for(Empresa emp: ejbFacade.findAll()){ 
     if(emp.getUsuarioidUsuario().getIdUsuario() 
       == usuarioController.getUserSession().getUser().getIdUsuario()){ 
      System.out.println(emp.getUsuarioidUsuario().getNombre()); 
      empByUsuarios.add(emp); 
     } 
    }  
    return JsfUtil.getSelectItems(empByUsuarios, false); 
} 

public List<Empresa> findRangeByUser(int[] range){ 
    List<Empresa> empByUsuarios = new ArrayList<Empresa>(); 

    for(Empresa emp: ejbFacade.findAll()){ 
     if(emp.getUsuarioidUsuario().getIdUsuario() 
       == usuarioController.getUserSession().getUser().getIdUsuario()){ 
      System.out.println(emp.getUsuarioidUsuario().getNombre()); 
      empByUsuarios.add(emp); 
     } 
    } 
    if(empByUsuarios.size() > 10){ 
     empByUsuarios.subList(range[0], range[1] - range[0]); 
    } 
    return empByUsuarios; 
} 

我duplcauted控制器(輔助bean)和製備的那些變化,一面是,我有2個控制器實際上是相同的,關於如何任何想法以避免這是值得歡迎的

0

一種解決方案是委託變化的另一種方法,改變你的產品清單到一個getItemsAvailableByUser回報。是這樣的:

public class Controller { 

    private SelectItem[] items; 
    // getter, setter 

    public void changeItems() { 
     items = getItemsAvailableByUser(); 
    } 

} 
+0

不顯示任何內容 –