estou fazendo uma tabela com JSF onde ela puxar os dados do banco através de um vetor.só que quando tento fazer que ela pegue informações exemplificas e fazer um qualitativo ela esta pegando e repetindo os dados nas linhas abaixo e colocando o numero 1 para cada e não faz a soma
Pagina Xhtml
<ui:composition template="/template.xhtml" xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui">
<ui:define name="conteudo">
<h1 class="sahu-page-title">Controle de Impressão</h1>
<h:form>
<p:messages id="msgs" autoUpdate="true" closable="true" />
<div class="ui-fluid">
<p:panel>
<p:panelGrid id="panelPesquisa" columns="8" layout="grid" styleClass="panelgrid-noborder"
columnClasses="ui-grid-col-1, ui-grid-col-2, ui-grid-col-1, ui-grid-col-1, ui-grid-col-1">
<p:outputLabel value="Tipo de Relatório" for="tipo_relatorio"/>
<p:selectCheckboxMenu id="tipo_relatorio" value="#{pesquisaControleImpressaoBean.filtro.tiposRelatorio}"
converter="omnifaces.GenericEnumConverter" label="--- Selecione ---" >
<f:selectItems value="#{pesquisaControleImpressaoBean.tiposRelatorio}" var="tipoRelatorio"
itemLabel="#{tipoRelatorio.descricao}" itemValue="#{tipoRelatorio}" />
</p:selectCheckboxMenu>
<h:outputLabel for="periodo" value="Período" />
<p:inputMask id="periodo" value="#{pesquisaControleImpressaoBean.filtro.periodo}" mask="99/9999" required="true"
requiredMessage="O período é obrigatório" converterMessage="Informe o período corretamente. Exemplo: 06/2010">
<f:convertDateTime pattern="MM/yyyy" timeZone="#{initParam.timezone}" />
</p:inputMask>
<h:outputLabel for="prontuario" value="Prontuario" />
<p:inputMask id="numeroprontuario" value="#{pesquisaControleImpressaoBean.filtro.numeroprontuario}" />
<p:commandButton value="Pesquisar" action="#{pesquisaControleImpressaoBean.buscar}"
process="tipo_relatorio numeroprontuario periodo @this" update="panelGrid" />
</p:panelGrid>
</p:panel>
</div>
<h:panelGrid id="panelGrid">
<p:dataTable id="tabela" rendered="#{not empty pesquisaControleImpressaoBean.controlesImpressao}" reflow="true"
value="#{pesquisaControleImpressaoBean.controlesImpressao}" var="controleImpressao" style="margin-top: 20px">
<p:column>
<f:facet name="header">
<h:outputText value="Relatório" />
</f:facet>
<h:outputText value="#{controleImpressao.tipoRelatorio.descricao}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nome do Paciente" />
</f:facet>
<h:outputText value="#{controleImpressao.paciente}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Prontuário" />
</f:facet>
<h:outputText value="#{controleImpressao.prontuario}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Quantidade de Impressões" />
</f:facet>
<h:outputText value="#{controleImpressao.quantidade}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Data e Hora da Impressão" />
</f:facet>
<h:outputText value="#{controleImpressao.periodoImpressao}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Local da Impressão" />
</f:facet>
<h:outputText value="#{controleImpressao.impressora}" />
</p:column>
<f:facet name="footer">
<h:outputText value="Total de Impressões: " />
<h:outputText value=" #{pesquisaControleImpressaoBean.total}" />
</f:facet>
</p:dataTable>
<p:separator />
<p:dataTable id="tabela1" rendered="#{not empty pesquisaControleImpressaoBean.controlesImpressao}" reflow="true"
value="#{pesquisaControleImpressaoBean.controlesImpressao}" var="controleImpressao" style="margin-top: 10px">
<p:column>
<f:facet name="header">
<h:outputText value="Tipo De Relatorio" />
</f:facet>
<h:outputText value="#{controleImpressao.tipoRelatorio.descricao}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Total De Impressões" />
</f:facet>
<h:outputText value="#{controleImpressao.quantidade}" />
</p:column>
</p:dataTable>
<c:if totalquantidae="${date.time != 0}" >
<h:outputText value="text" />
</c:if>
<p:dataTable id="tabela2" rendered="#{not empty pesquisaControleImpressaoBean.controlesImpressao}" reflow="true"
value="#{pesquisaControleImpressaoBean.controlesImpressao}" var="controleImpressao" style="margin-top: 10px">
<p:column>
<f:facet name="header">
<h:outputText value="Nome do Paciente" />
</f:facet>
<h:outputText value="#{controleImpressao.paciente}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Total De Impressões" />
</f:facet>
<h:outputText value="#{controleImpressao.quantidade}" />
</p:column>
</p:dataTable>
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
Controlesimpressão
package net.ebserh.huunivasf.repository.segurancaPaciente;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.transform.Transformers;
import org.hibernate.type.StandardBasicTypes;
import org.hibernate.type.Type;
import net.ebserh.huunivasf.model.segurancaPaciente.ControleImpressao;
import net.ebserh.huunivasf.model.segurancaPaciente.ControleImpressaoID;
import net.ebserh.huunivasf.model.segurancaPaciente.InfoQuantitativoImpressaoPaciente;
import net.ebserh.huunivasf.utils.jpa.Transactional;
import net.ebserh.huunivasf.utils.jsf.FacesUtil;
public class ControlesImpressao implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private EntityManager manager;
public ControleImpressao buscarControleImpressaoPorID(ControleImpressaoID controleImpressaoID) {
return manager.find(ControleImpressao.class, controleImpressaoID);
}
@Transactional
public void salvar(ControleImpressao controleImpressao) {
manager.merge(controleImpressao);
manager.flush();
}
@SuppressWarnings("unchecked")
public List<InfoQuantitativoImpressaoPaciente> buscarComFiltro(FiltroControleImpressao filtro) {
Criteria criteria = criarCriteriaParaFiltro(filtro);
criteria.createAlias("paciente", "p");
criteria.addOrder(Order.asc("p.nome"));
ProjectionList pl = Projections.projectionList()
.add(Projections.sqlGroupProjection("to_char(data_impressao,'dd/MM/yyyy - hh:mm:ss') as periodoImpressao", "periodoImpressao",
new String[] { "periodoImpressao" }, new Type[] { StandardBasicTypes.STRING }))
.add(Projections.groupProperty("p.nome").as("paciente"))
.add(Projections.groupProperty("p.prontuario").as("prontuario"))
.add(Projections.groupProperty("tipoRelatorio").as("tipoRelatorio"))
.add(Projections.groupProperty("impressora").as("impressora"))
.add(Projections.count("codigo").as("quantidade"));
criteria.setProjection(pl).setResultTransformer(Transformers.aliasToBean(InfoQuantitativoImpressaoPaciente.class));
List<InfoQuantitativoImpressaoPaciente> lista = criteria.list();
if (lista == null || lista.isEmpty()) {
FacesUtil.adicionarMensagem("Não foram encontrados registros para o período selecionado!", FacesMessage.SEVERITY_WARN);
}
return lista;
}
private Criteria criarCriteriaParaFiltro(FiltroControleImpressao filtro) {
Session session = manager.unwrap(Session.class);
Criteria criteria = session.createCriteria(ControleImpressao.class);
if (filtro.getTiposRelatorio() != null && !filtro.getTiposRelatorio().isEmpty()) {
criteria.add(Restrictions.in("tipoRelatorio", filtro.getTiposRelatorio()));
}
if (filtro.getnumeroprontuario() != null) {
criteria.add(Restrictions.eq("p.prontuario", filtro.getnumeroprontuario()));
}
criteria.add(Restrictions.between("dataImpressao", geraDataInicial(filtro.getPeriodo()), geraDataFinal(filtro.getPeriodo())));
return criteria;
}
private Date geraDataInicial(Date dataEntrega) {
Calendar dataEntregaInicial = Calendar.getInstance();
dataEntregaInicial.setTime(dataEntrega);
dataEntregaInicial.set(Calendar.DAY_OF_MONTH, 1);
dataEntregaInicial.set(Calendar.HOUR_OF_DAY, 0);
dataEntregaInicial.set(Calendar.MINUTE, 0);
dataEntregaInicial.set(Calendar.SECOND, 0);
return dataEntregaInicial.getTime();
}
private Date geraDataFinal(Date dataEntrega) {
Calendar dataEntregaFinal = Calendar.getInstance();
dataEntregaFinal.setTime(dataEntrega);
dataEntregaFinal.set(Calendar.DAY_OF_MONTH, dataEntregaFinal.getActualMaximum(Calendar.DAY_OF_MONTH));
dataEntregaFinal.set(Calendar.HOUR_OF_DAY, 23);
dataEntregaFinal.set(Calendar.MINUTE, 59);
dataEntregaFinal.set(Calendar.SECOND, 59);
return dataEntregaFinal.getTime();
}
}
Pesquisadecontroleimpressaobeen