您好我有以下问题,我有一个表格,其中我显示了一个公司列表,我希望过滤该列表的方式,用户只能看到他创建的公司列表。 见表
<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=" "/>
</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 :(得分:0)
一种解决方案是将更改委派给另一个方法,并将项目列表更改为一个getItemsAvailableByUser
返回。像这样:
public class Controller {
private SelectItem[] items;
// getter, setter
public void changeItems() {
items = getItemsAvailableByUser();
}
}
答案 1 :(得分: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;
}
我重复了控制器(支持bean)并进行了这些更改,不足之处在于我有2个控制器几乎完全相同,欢迎任何关于如何避免这种情况的想法