如何在List中过滤结果

时间:2013-07-06 18:59:26

标签: java sql jsf-2 managed-bean

我有一些包含某些产品的页面,我想过滤一些参数,这就是我展示产品的方式:

<h:panelGroup id="productos" layout="block">
  <ui:repeat value="#{tipoBean.productos}" var="prod">
    <div class="producto" style="width: 245px; height: 200px; float: left; text-align: center;">
      <h3><h:outputText value="#{prod.nombre}" /></h3>
      <h:link outcome="producto">
        <h:graphicImage library="img" name="imagen.png" />
        <f:param name="marca" value="#{categoriaBean.marca}" />
        <f:param name="tipo" value="#{categoriaBean.tipo}" />
        <f:param name="prod" value="#{prod.nombre}" />
      </h:link>
    </div>
  </ui:repeat>
</h:panelGroup>

我还有一个带有一些复选框的块,我想在选择其中任何一个时过滤结果,这就是块:

<div id="filtroTipo" class="filtroTipo" style="width: 220px; height: 860px; float: left; text-align: center;">
  <h2>Filtrar Resultados</h2>
  <h:form>
    <h3>Sistema Operativo</h3>
    <p:selectManyCheckbox value="#{tipoBean.sistOpsSelected}" layout="pageDirection">
      <f:selectItems value="#{tipoBean.sistOps}" />
      <p:ajax listener="#{tipoBean.filtrarProductos}" update="productos" />
    </p:selectManyCheckbox>
  </h:form>
</div>

现在是什么时候出现了大疑问,我不知道如何过滤,有很多方法可以做到这一点,但我的意思是,有什么合适的方法呢?我必须使用什么? EntityManager的? PreparedStatement的?只删除我不想使用的项目?

我尝试使用注入的EntityManager,但它不起作用。

问候。

1 个答案:

答案 0 :(得分:1)

通常,为了过滤结果,您可以使用适当的过滤器对数据库进行新查询。特别是当您必须读取太多行而不是一次读取所有行时,您会分页并开始每页读取20行左右。在这些情况下,唯一的方法是在数据库查询中应用过滤器,因为您没有托管bean中的所有实体,只有当前页面。我知道这不是你的场景(至少目前为止),因为你没有分页,但我提到它,因为将来你可能需要分页,这就是它的完成方式