1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Erro ID EJB no LazyDataModel NullPointerException

Estou com um problema ao tentar realizar uma ID no EJB em um LazyDataModel.

Ao tentar recuperar os clientes por paginação no método load ("LazyDataModel") no método ("this.clienteServico.recuperarPorPaginacao") recebo um java.lang.NullPointerException, já que por algum motivo a ID não foi realizada no objeto clienteServico que está anotado @EJB.

O que estou fazendo de errado?

LazyDataModel

public class ClienteLazyDataModel extends LazyDataModel<Cliente> {

    private static final long serialVersionUID = 1L;

    @EJB
    private ClienteService clienteServico;

    private List<Cliente> clientes;

    public ClienteLazyDataModel() {
    }

    @Override
    public List<Cliente> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {

        String ordenacao = sortOrder.toString();

        if(SortOrder.UNSORTED.equals(ordenacao)) {
            ordenacao = SortOrder.ASCENDING.toString();
        }

        this.clientes = this.clienteServico.recuperarPorPaginacao(first, pageSize, sortField, ordenacao, filters);    


        if (super.getRowCount() <= 0 || (filters != null && !filters.isEmpty())) {
            super.setRowCount(this.clienteServico.recuperarQuantidade(filters));
        }

        super.setPageSize(pageSize);

        return this.clientes;
    }

    @Override
    public void setRowIndex(int rowIndex) {

        if (rowIndex == -1 || super.getPageSize() == 0) {
                super.setRowIndex(-1);
        } else {
            super.setRowIndex(rowIndex % super.getPageSize());
        }
    }

    @Override
    public Cliente getRowData(String rowKey) {
        for (Cliente cliente : this.clientes) {
            if (rowKey.equals(this.getRowKey(cliente))) {
                    return cliente;
            }
        }

        return null;
    }

    @Override
    public Object getRowKey(Cliente cliente) {
        return cliente.getId();
    }


}

Managed Bean

@ManagedBean
@RequestScoped
public class ClienteMB implements Serializable{

    private static final long serialVersionUID = 1L;

    @EJB
    private ClienteService clienteServico;

    private Cliente cliente;

    private List<Cliente> clientesSelecionados;

    private LazyDataModel<Cliente> clientesLazy;

    private String textoPesquisa;

    public Cliente getCliente() {

        if(this.cliente == null){
            this.cliente = new Cliente();
        }

        return this.cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public List<Cliente> getClientesSelecionados() {

        return this.clientesSelecionados;
    }

    public void setClientesSelecionados(List<Cliente> clientesSelecionados) {
        this.clientesSelecionados = clientesSelecionados;
    }

    public LazyDataModel<Cliente> getClientesLazy() {
        if (this.clientesLazy == null) {
            this.clientesLazy = new ClienteLazyDataModel();
        }

        return this.clientesLazy;
    }

    public void setClientesLazy(LazyDataModel<Cliente> clientesLazy) {
        this.clientesLazy = clientesLazy;
    }

    public String getTextoPesquisa() {
        return this.textoPesquisa;
    }

    public void setTextoPesquisa(String textoPesquisa) {
        this.textoPesquisa = textoPesquisa;
    }

    public void inserir() throws RepositoryException{

        Calendar dataModificacao = Calendar.getInstance();

        this.cliente.setDataModificacao(dataModificacao);
        this.cliente.setIdUsuarioModificacao("MSEABRA");

        this.clienteServico.inserir(this.cliente);

        this.cliente = null;

    }
}

JSF

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui" >
<h:body>
    <ui:composition template="/pages/template/layout.xhtml">
        <ui:define name="divMain">

            <h:form id="form">

                <p:dataTable id="clientes" var="cliente" value="#{clienteMB.clientesLazy}" selection="#{clienteMB.clientesSelecionados}" 
                             selectionMode="single" lazy="true" paginator="true" paginatorPosition="bottom" rowsPerPageTemplate="20, 40, 60" rows="20"
                             paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                             currentPageReportTemplate="{currentPage} #{msg.datatable_currentPageReportTemplate_of} {totalPages}">

                      <f:facet name="header">
                          <p:toolbar id="toolbar">  
                            <p:toolbarGroup align="left">  
                                <p:commandButton id="novoButton" value="#{msg.action_new}" icon="ui-icon-document" onclick="incluirClienteDialog.show()" update="clientes"/>  

                                  <p:commandButton type="editarButton" value="#{msg.action_edit}" icon="ui-icon-pencil" onclick="editarClienteDialog.show()" update="clientes"/>

                                <p:commandButton type="atualizarButton" value="#{msg.action_refresh}" icon="ui-icon-refresh" actionListener="clienteMB.recuperarTodos()" process="@this" update="clientes"/>

                            </p:toolbarGroup>
                        </p:toolbar>
                      </f:facet>

                      <p:column headerText="#{msg.column_acronym}">
                        #{cliente.sigla}
                    </p:column>

                     <p:column headerText="#{msg.column_name}">
                        #{cliente.nome}
                    </p:column>

                    <p:column headerText="#{msg.column_description}">
                        #{cliente.descricao}
                    </p:column>

                    <p:column headerText="#{msg.column_disabled}">
                        <p:selectBooleanCheckbox value="#{clienteMB.cliente.inativo}" disabled="true"/>
                    </p:column>

                </p:dataTable>

            </h:form>

            <ui:include src="/pages/protected/cliente/incluirClienteDialog.xhtml" />

        </ui:define>  
    </ui:composition>

</h:body>

</html>

Erro

java.lang.NullPointerException
    at com.jsf.lazy.ClienteLazyDataModel.load(ClienteLazyDataModel.java:36)
    at org.primefaces.component.datatable.DataTable.loadLazyData(DataTable.java:731)
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:79)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
    at java.lang.Thread.run(Unknown Source)
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags ejb jsf lazy ou faça a sua própria pergunta.