Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida sobre como mostrar meu filtro no DataTable. - PrimeFaces

Estou com uma seguinte duvida. Possuo uma página de pesquisa de serviço, quando entro nela já carrega todos os objetos . Ao tentar fazer uma consulta, como faço para mostrar aquele objeto através da consulta?

OBS: A consulta está funcionando, quero apenas carregar os objetos por página para que não fique muitas informações em memoria.

Segue Meu Código:

<h1>Pesquisa de Servico</h1>

    <h:form id="frmPesquisaServico">
        <p:messages id="messages" autoUpdate="true" closable="true" />

        <p:toolbar style="margin-top: 20px">
            <p:toolbarGroup>
                <p:button outcome="cadastroServico" value="Novo Serviço"/>
                <p:commandButton value="Pesquisar" id="botaoPesquisa" action="#{consultaServico.buscaServicoDeVeiculoEntreDatasPorPlaca}"    update="@form" />
            </p:toolbarGroup>
        </p:toolbar>
        <br />
        <p:panelGrid columns="2" id="painel" style="width: 100%" columnClasses="rotulo, campo">
            <p:outputLabel value="data" />
            <h:panelGroup>
                <p:calendar value="#{consultaServico.dataInicio}" size="11" pattern="dd/MM/yyyy" maxlength="10"/>
                a
                <p:calendar  value="#{consultaServico.dataFim}" size="11" pattern="dd/MM/yyyy" maxlength="10"/>
            </h:panelGroup>
            <p:outputLabel value="placa do Veículo" for="placa_veiculo" />
            <p:autoComplete id="placa_veiculo"  value="#{consultaServico.servicoSelecionado.carro}" size="10" dropdown="true"
                            completeMethod="#{consultaServico.completaPlacaVeiculo}" var="placaVeiculo" itemLabel="#{placaVeiculo.placa}" 
                            itemValue="#{placaVeiculo}"    forceSelection="true" minQueryLength="3" placeholder="Placa do Veículo"/>
        </p:panelGrid>

        <p:dataTable id="tabelaPesquisaServico" value="#{consultaServico.lazyServicos}" var="servico"
                     style="margin-top: 20px" emptyMessage="Nenhum Serviço encontrado." rows="10" 
                     rowsPerPageTemplate="20,30,40,50" paginator="true" paginatorAlwaysVisible="false"
                     paginatorPosition="bottom" reflow="true" lazy="true">
                    <f:facet name="header">
                TABELA DE PESQUISA DE SERVIÇO
            </f:facet>
            <p:column headerText="Cliente" style="text-align: center; width: 300px">
                <p:outputLabel value="#{servico.cliente.nome}" />
            </p:column>
            <p:column headerText="Veículo" style="text-align: center; width: 120px">
                <p:outputLabel value="#{servico.carro.modeloCarro.nome}" />
            </p:column>
            <p:column headerText="Data do Serviço"    style="text-align: center; width: 130px">
                <p:outputLabel value="#{servico.diaServico}">
                    <f:convertDateTime pattern="dd', 'MMMM ' de ' yyyy" />
                </p:outputLabel>
            </p:column>
            <p:column headerText="Data da Garantia"    style="text-align: center;width: 130px">
                <p:outputLabel value="#{servico.diaGarantia}">
                    <f:convertDateTime pattern="dd', 'MMMM ' de ' yyyy" />
                </p:outputLabel>
            </p:column>
            <p:column headerText="Valor do Serviço"    style="text-align: center;width: 100px">
                <p:outputLabel value="#{servico.valor}" />
            </p:column>
            <p:column headerText="Descrição" style="text-align: center;width: 100px">
                    <p:commandButton icon="ui-icon-extlink" title="Descrição do Serviço" 
                            process="@this" oncomplete="PF('mostraDescricao').show();" update=":frmPesquisaServico:mostraServicosDialog">
                        <f:setPropertyActionListener target="#{consultaServico.servicoSelecionado}" value="#{servico}" />
                    </p:commandButton>
            </p:column>
            <p:column headerText="Observação" style="text-align: center;width: 100px">
                    <p:commandButton icon="ui-icon-extlink" title="Observação do Serviço" 
                            process="@this" oncomplete="PF('mostraObservacao').show();" update=":frmPesquisaServico:mostraObservacaoDialog" >
                        <f:setPropertyActionListener target="#{consultaServico.servicoSelecionado}" value="#{servico}" />
                    </p:commandButton>
            </p:column>
            <p:column headerText="Editar / Excluir" style="text-align: center;width: 100px" >
                <p:button outcome="cadastroServico" icon="ui-icon-pencil" title="Editar">
                    <f:param name="servico" value="#{servico.codigo}" />
                </p:button>
                    -
                    <p:commandButton icon="ui-icon-trash" title="Excluir"
                    oncomplete="PF('confirmacaoExclusao').show()" process="@this"
                    update=":frmPesquisaServico:confirmacaoExclusaoDialog">
                    <f:setPropertyActionListener value="#{servico}"    target="#{consultaServico.servicoSelecionado}" />
                </p:commandButton>
            </p:column>
        </p:dataTable>

        <p:confirmDialog id="confirmacaoExclusaoDialog"    widgetVar="confirmacaoExclusao"
                         message="Deseja excluir o serviço do carro #{consultaServico.servicoSelecionado.carro.modeloCarro.nome} ?"
                         header="Exclusão de Serviço" severity="alert">
            <p:button value="Não" onclick="PF('confirmacaoExclusao').hide(); return false;" />

            <p:commandButton value="Sim" update=":frmPesquisaServico:tabelaPesquisaServico" process="@this" oncomplete="PF('confirmacaoExclusao').hide()"
                             action="#{consultaServico.excluir}" />
        </p:confirmDialog>

        <p:dialog id="mostraServicosDialog" header="DESCRIÇÃO DO SERVICO" widgetVar="mostraDescricao" 
                  hideEffect="true" height="100" width="320" modal="true">
            <p:dataList value="#{consultaServico.servicoSelecionado}" var="serv" itemType="disc" 
                        rendered="#{not empty consultaServico.servicoSelecionado.descricaoServico}"> #{serv.descricaoServico}
            </p:dataList>
            <h:outputText value="Não Possui nenhuma descrição deste serviço." rendered="#{empty consultaServico.servicoSelecionado.descricaoServico}"/>
        </p:dialog>

        <p:dialog id="mostraObservacaoDialog" header="OBSERVAÇÃO DO SERVIÇO" widgetVar="mostraObservacao" hideEffect="true" height="100" width="320" modal="true">
            <p:dataList value="#{consultaServico.servicoSelecionado}" var="servico" itemType="disc"  
                        rendered="#{not empty consultaServico.servicoSelecionado.observacao}"> #{servico.observacao}

            </p:dataList>
            <h:outputText value="Não Possui nenhuma Observação deste serviço." rendered="#{empty consultaServico.servicoSelecionado.observacao}"/>
        </p:dialog>
    </h:form>
</ui:define>

MeuBean

@Named
@ViewScoped
public class ConsultaServico implements Serializable {

    private static final long serialVersionUID = 1L;

    @Inject
    private ServicoService servicoService;

    @Inject
    private CarroService carroService;

    @Inject
    private ServicoDAO servicoDAO;

    @Getter
    private LazyServicoDataModel lazyServicos;

    @Getter
    @Setter
    private Servico servicoSelecionado = new Servico();
    @Getter
    @Setter
    private Carro carro;
    @Setter
    @Getter
    private Date dataInicio;
    @Setter
    @Getter
    private Date DataFim;

    @Getter
    private List<Servico> servicos;


    public void inicializa() {
        lazyServicos = new LazyServicoDataModel(servicoDAO);

    }

    /**
     * Método que busca o Veículo entre Datas com a Placa do veiculo
     * @return
     */
    public void buscaServicoDeVeiculoEntreDatasPorPlaca() {
        try{
             servicos = servicoService.buscarServicoEntreDatasPorPlaca(dataInicio, DataFim, carro);
             Messages.addGlobalInfo("Consulta de Placa: " + servicoSelecionado.getCarro().getPlaca()+" realizada com sucesso!");
        }catch (Exception e) {
            e.printStackTrace();
            Messages.addGlobalError("Não foi possível consultar o Servico");
        }
    }

Classe que Carrega os objetos por página

public class LazyServicoDataModel extends LazyDataModel<Servico> implements Serializable {

    private ServicoDAO servicoDAO;

    public LazyServicoDataModel(ServicoDAO servicoDAO) {
        this.servicoDAO = servicoDAO;
    }

    /**
     * Método que mostra quantidade de registro por página e linha.
     */
    @Override
    public List<Servico> load(int primeiraLinha, int qtdRegistro, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
        List<Servico> servicos = this.servicoDAO.buscarComPaginacao(primeiraLinha,qtdRegistro);
        this.setRowCount(this.servicoDAO.encontrarQuantidadeDeServico().intValue());

        return servicos;
    }
}
1 resposta
solução!

Fala Dayson, tudo bem?

o que vc precisa fazer é um dataModel para o buscarServicoEntreDatasPorPlaca.

Você pode até aproveitar o DataModel que vc criou e utilizar o parametro sortField passando ele em um metodo semalhante ao buscarComPaginacao do seu DAO.

espero ter ajudado =)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software