Estou com um problema quando vou adicionar um novo produto, ao chamar o addProduct.jsp estou tendo esse erro:
[quote]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[/quote]
Esse é o meu ProductDAO.java
[code]/*
- 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 ListgetAllProducts() throws ClassNotFoundException, ClassNotFoundException, SQLException{
List toReturn = new LinkedList();
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”));
}
}
[/code]
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
[code]<?xml version='1.0' encoding='UTF-8'?>
productFace
myfirstjsfapp.managedbeans.ProductFace
session
salesFace
myfirstjsfapp.managedbeans.SalesFace
session
/welcomeJSF.jsp
gotoListProducts
/products.jsp
/products.jsp
gotoListProducts
/products.jsp
gotoAddNewProduct
/addProduct.jsp
/addProduct.jsp
gotoListProducts
/products.jsp
[/code]