Java.lang.NullPointerException

5 respostas
robinhodemorais

Estou com um problema quando vou adicionar um novo produto, ao chamar o addProduct.jsp estou tendo esse erro:

javax.faces.el.EvaluationException: java.lang.NullPointerException at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NullPointerException at myfirstjsfapp.dao.ProductDAO.add(ProductDAO.java:30) at myfirstjsfapp.managedbeans.ProductFace.finishAddProduct(ProductFace.java:36) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.el.parser.AstValue.invoke(AstValue.java:278) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274) at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:70) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) ... 24 more

Esse é o meu ProductDAO.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package myfirstjsfapp.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import myfirstjsfapp.db.DatabaseUtil;
import myfirstjsfapp.db.Product;

/**
 *
 * @author Robinho
 */
public class ProductDAO extends DatabaseUtil{

    private static final long serialVersionUID = 1L;
    
    public ProductDAO(){        
        super();
    }
    
    public boolean add(Product prod) throws ClassNotFoundException, SQLException{
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("INSERT INTO APP.PRODUCT values (?,?,?,?)");
        ps.setInt(1, prod.getCode());
        ps.setString(2, prod.getName());
        ps.setInt(3, prod.getNumberofitens());
        ps.setDouble(4, prod.getPrice());
        int toReturn = ps.executeUpdate();
        ps.close();
        return toReturn > 0;
    }
    
    public boolean set(Product prod) throws ClassNotFoundException, SQLException{
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("UPDATE APP.PRODUCT SET NAME = ?, NUMBEROFITENS = ?, PRICE = ? WHERE CODE = ?");
        ps.setString(1, prod.getName());
        ps.setInt(2, prod.getNumberofitens());
        ps.setDouble(3, prod.getPrice());
        ps.setInt(4, prod.getCode());
        int toReturn = ps.executeUpdate();
        ps.close();
        return toReturn > 0;
    }
    
    public boolean delete(Product prod) throws SQLException, ClassNotFoundException{
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("DELETE FROM APP.PRODUCT WHERE CODE = ? ");
        ps.setInt(1, prod.getCode());
        int toReturn = ps.executeUpdate();
        ps.close();
        return toReturn > 0;
    }
    
    public List<Product>getAllProducts() throws ClassNotFoundException, ClassNotFoundException, SQLException{
        List<Product> toReturn = new LinkedList<Product>();
        ResultSet rs = getStatement().executeQuery("SELECT * FROM APP.PRODUCT");
        while (rs.next()){
            Product prod = new Product();
            populateProd(prod,rs);
            toReturn.add(prod);
        }
        rs.close();
        return toReturn;
    }
    
    public Product getById(int iProduct) throws ClassNotFoundException, SQLException{
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("SELECT * FROM APP.PRODUCT WHERE CODE = ? ");
        ps.setInt(1, iProduct);
        ResultSet rs = ps.executeQuery();
        if (!rs.next()) return null;
        Product toReturn = new Product();
        populateProd(toReturn, rs);
        rs.close();
        ps.close();        
        return toReturn;
        
    }

    private void populateProd(Product prod, ResultSet rs) throws SQLException {
        prod.setCode(rs.getInt("CODE"));
        prod.setName(rs.getString("NAME"));
        prod.setNumberofitens(rs.getInt("NUMBEROFITENS"));
        prod.setPrice(rs.getDouble("PRICE"));
    }
}

Esse é o meu ManagedBean (ProductFace.java):

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package myfirstjsfapp.managedbeans;

import java.sql.SQLException;
import java.util.List;
import myfirstjsfapp.dao.ProductDAO;
import myfirstjsfapp.db.Product;


/**
 *
 * @author Robinho
 */
public class ProductFace {

    private ProductDAO prodDAO = new ProductDAO();
    private Product selectedProduct;
    private List<Product> products;
    

    /** Creates a new instance of ProductFace */
    public ProductFace() {
        System.out.println("The product face has created !");
    }
    
    public String startAddProduct(){
        selectedProduct = new Product();
        return "gotoAddNewProduct";
    }
    
    public String finishAddProduct() throws ClassNotFoundException, SQLException{
        prodDAO.add(selectedProduct);
        //Clean the Cached Products
        products = null;
        return "gotoListProducts";                
    }
    
    public List<Product> getProducts() throws ClassNotFoundException, SQLException{
        if (products == null){
            products = prodDAO.getAllProducts();
        }        
        return products;
    }
    
    public String startEditProduct(){
       return "gotoEditProduct";
    }
    
    public String finishEditProduct()  throws ClassNotFoundException, SQLException{
        prodDAO.set(selectedProduct);
        //Clean the Cached Products
        products = null;
        return "gotoListProducts";                
    }

    public String removeProduct()  throws ClassNotFoundException, SQLException{
        prodDAO.delete(selectedProduct);
        products = null;
        return "gotoListProducts";
    }

    public Product getSelectedProduct() {
        return selectedProduct;
    }

    public void setSelectedProduct(Product selectedProduct) {
        this.selectedProduct = selectedProduct;
    }
}

e esse é o meu products.jsp

<%-- 
    Document   : products
    Created on : 31/07/2013, 23:13:20
    Author     : Robinho
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!doctype html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>The Products</title>
    </head>
    <body>
        <f:view>
            <h:form>
            <h1><h:outputText value="The Products"/></h1>
            <h:dataTable border="1" var="item" value="#{productFace.products}">
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="code"/>
                    </f:facet>
                    <h:outputText value="#{item.code}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Name"/>
                    </f:facet>
                    <h:outputText value="#{item.name}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Stock"/>
                    </f:facet>
                    <h:outputText value="#{item.numberofitens}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Price"/>
                    </f:facet>
                    <h:outputText value="#{item.price}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Actions"/>
                    </f:facet>
                    <h:commandLink value="delete" action="#{productFace.removeProduct}">
                        <f:setPropertyActionListener target="#{productFace.selectedProduct}" value="#{item}"/>
                    </h:commandLink> 
                    <h:outputText value="/"/>
                    <h:commandLink value="edit" action="#{productFace.startEditProduct}">
                        <f:setPropertyActionListener target="#{productFace.selectedProduct}" value="#{item}"/>
                    </h:commandLink> 
                </h:column>
            </h:dataTable>

            <br/>

            [b]<h:commandButton action="#{productFace.finishAddProduct}" value="Add new Product" />[/b]
            </h:form>
        </f:view>
    </body>
</html>

Acima que está o Button que clico e ai aparece o erro....

esse é o meu faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="2.0"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
    <managed-bean>
        <managed-bean-name>productFace</managed-bean-name>
        <managed-bean-class>myfirstjsfapp.managedbeans.ProductFace</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>salesFace</managed-bean-name>
        <managed-bean-class>myfirstjsfapp.managedbeans.SalesFace</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/welcomeJSF.jsp</from-view-id>
        <navigation-case>
            <from-outcome>gotoListProducts</from-outcome>
            <to-view-id>/products.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/products.jsp</from-view-id>
        <navigation-case>
            <from-outcome>gotoListProducts</from-outcome>
            <to-view-id>/products.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>gotoAddNewProduct</from-outcome>
            <to-view-id>/addProduct.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/addProduct.jsp</from-view-id>
        <navigation-case>
            <from-outcome>gotoListProducts</from-outcome>
            <to-view-id>/products.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>

5 Respostas

drsmachado

NullPointerException é uma exceção que diz: Você, programador, esqueceu de instanciar algum objeto e está tentando acessar algo dentro dele.
A mensagem deve ser lida até que você encontre onde cometeu a “cagada”.
Eu facilitei isso pra ti:

at myfirstjsfapp.dao.ProductDAO.add(ProductDAO.java:30)
robinhodemorais

realmente não estou conseguindo ver onde eu fiz a “cagada” rs…pois na classe de test funcionou certinho…

me ajuda ai…

drsmachado

robinhodemorais:
realmente não estou conseguindo ver onde eu fiz a “cagada” rs…pois na classe de test funcionou certinho…

me ajuda ai…


Minha bola de cristal não está funcionando.
Talvez se você depurar, consiga ver algo que ela não me mostra.

alexandresobral2004

Já passei por isso e resolvi colocando o code ou id como Integer em vez de int.Já tentou isso?

ps.setInt(1, prod.getCode());

Outra coisa é que o products.jsp que vc postou é para exibir os produtos cadastrados, o erro é nessa página mesmo ou no addProducts?
veja também se vc está chamando o endereço correto dos atributos usando o ProductFace.selectedProduto.nomedoproduto ok?

as vezes este tipo de erro passa despercebido!!

Espero ter ajudado!

diogogama

Em algum momento você está tentando acessar um comportamento de um objeto que não foi instanciado…

Ex:

se fizer isso

Moveis cadeira; cadeira.getPes();
vai dar nullpointer, pois vc não atribuiu um objeto (esse é um dos muitos exemplos)

agora se fizer

Moveis cadeira = new Moveis(); cadeira.getPes;

aí vai rodar certinho…

espero ter ajudado…

Criado 31 de julho de 2013
Ultima resposta 7 de ago. de 2013
Respostas 5
Participantes 4