javax.el.PropertyNotFoundException:Property' id'没有在型号model.Grocery上找到

时间:2016-05-06 16:55:25

标签: java jsp exception servlets crud

我正在制作一个页面,您可以在其中更新,编辑,删除,插入数据库中的数据。插入页面运行良好,数据插入成功,但是当我单击"添加"按钮我没有被重定向到AllGrocery页面,但Eclipse给出了这个错误。可以找出问题所在。可以帮助我吗?数据库:GroceryStore,表:grocerys(id,name,price)

DataAccess.java

package dao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

import com.sun.istack.internal.logging.Logger;

import db.DBUtils;
import model.Grocery;

public class DataAccess {

    public void addNew(Grocery g) throws ClassNotFoundException, SQLException{
        try {
        PreparedStatement ps = DBUtils.getPreparedStatement("insert into grocerys values(?,?,?)");
        ps.setInt(1, g.getID());
        ps.setString(2, g.getName());
        ps.setDouble(3, g.getPrice());

        ps.executeUpdate();

        } catch(ClassNotFoundException | SQLException ex){

        }
    }

    public static List<Grocery> getAll(){
        List<Grocery> gs = new LinkedList<>();

        try {
            ResultSet rs = DBUtils.getPreparedStatement("select * from grocerys").executeQuery();

            while (rs.next()){
                Grocery g = new Grocery();
                g.setID(rs.getInt(1));
                g.setName(rs.getString(2));
                g.setPrice(rs.getDouble(3));

                gs.add(g);
            }

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return gs;
    }
}

DBUtils.java

package db;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.SQLException;

public class DBUtils {

    public static PreparedStatement getPreparedStatement(String sql) throws ClassNotFoundException, SQLException{

        PreparedStatement ps = null;

        Class.forName("com.mysql.jdbc.Driver");

        String url = "jdbc:mysql://localhost:3306/GroceryStore";
        String user = "root";
        String pass = "adil";

        Connection conn = DriverManager.getConnection(url,user,pass);

        ps = conn.prepareStatement(sql);


        return ps;

    }

    public static void main(String[] args)throws ClassNotFoundException, SQLException {

        getPreparedStatement("select * from grocerys");

    }

}

Grocery.java

package model;

public class Grocery {

    private int id;
    private String name;
    private Double price;

    public void setID(int id_){
        id = id_;
    }

    public void setName(String name_){
        name = name_;
    }

    public void setPrice(Double price_){
        price = price_;
    }

    public int getID(){
        return id;
    }

    public String getName(){
        return name;
    }

    public Double getPrice(){
        return price;
    }

}

AllGrocery.java

package servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.DataAccess;

/**
 * Servlet implementation class AllGrocery
 */
@WebServlet("/AllGrocery")
public class AllGrocery extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public AllGrocery() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setAttribute("AllGrocery", DataAccess.getAll());

        RequestDispatcher rd = request.getRequestDispatcher("AllGrocery.jsp");

        rd.forward(request, response);



    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}


        public Double getPrice(){
            return price;
        }

    }

AddNew.html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Add Grocery</title>
</head>
<body>

<h1>Add New Grocery</h1>
<form action = "ManagerAddNew.jsp" method = "post">
<table>

<tr>
<th>ID</th>
<td><input type = "number" name = "id" style = "width : 200px;"/></td>
</tr>

<tr>
<th>NAME</th>
<td><input type = "text" name = "name" style = "width : 200px;"/></td>
</tr>


<tr>
<th>PRICE</th>
<td><input type = "number" name = "price" style = "width : 200px;"/></td>
</tr>


<tr>
<th></th>
<td><input type = "submit" name = "submit" value = "ADD"/></td>
</tr>

</table>
</form>

</body>
</html>

AllGrocery.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

    <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Grocerys Available</title>
</head>
<body>

<div syle = "width : 1200px; margin-left:auto;margin-right:auto;">

<table cellpadding = "10">

<tr>

<th>ID</th>
<th>Name</th>
<th>Price</th>

</tr>

<c:forEach items = "${AllGrocery}" var = "p">

<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td>${p.price}</td>
<td>

<a href = "edit?id = ${p.id}">Edit</a>
<a href = "delete?id = ${p.id}">Delete</a>

</td>
</tr>


</c:forEach>

</table>

</div>

</body>
</html>

ManagerAddNew.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

    <%@ page import = "model.Grocery" %>
    <%@ page import = "dao.DataAccess" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<%

String name = request.getParameter("name");
int id = Integer.parseInt(request.getParameter("id"));
Double price = Double.parseDouble(request.getParameter("price"));

Grocery g = new Grocery();
g.setID(id);
g.setName(name);
g.setPrice(price);

DataAccess da = new DataAccess();

da.addNew(g);

response.sendRedirect("/SimpleServletProject/AllGrocery");

%>

</body>
</html>

错误:

org.apache.jasper.JasperException: An exception occurred processing JSP page /AllGrocery.jsp at line 29

26: <c:forEach items = "${AllGrocery}" var = "p">
27: 
28: <tr>
29: <td>${p.id}</td>
30: <td>${p.name}</td>
31: <td>${p.price}</td>
32: <td>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:575)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    servlet.AllGrocery.doGet(AllGrocery.java:38)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


root cause 

javax.el.PropertyNotFoundException: Property 'id' not found on type model.Grocery
    javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:290)
    javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:243)
    javax.el.BeanELResolver.property(BeanELResolver.java:377)
    javax.el.BeanELResolver.getValue(BeanELResolver.java:97)
    org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
    org.apache.el.parser.AstValue.getValue(AstValue.java:184)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:950)
    org.apache.jsp.AllGrocery_jsp._jspx_meth_c_005fout_005f0(AllGrocery_jsp.java:215)
    org.apache.jsp.AllGrocery_jsp._jspx_meth_c_005fforEach_005f0(AllGrocery_jsp.java:163)
    org.apache.jsp.AllGrocery_jsp._jspService(AllGrocery_jsp.java:113)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    servlet.AllGrocery.doGet(AllGrocery.java:38)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

2 个答案:

答案 0 :(得分:3)

如果您看到异常,则无法在Grocery对象中找到属性ID。您的id的getter方法名称应更改为getId(),而不是getID()。它应该是getId(),因为当你camelCase你只需将变量的第一个字符更改为大写而不是整个变量。

答案 1 :(得分:1)

您的java Bean Grocery不符合Bean标准。 JavaBeans Conventions

如果您使用的是某些IDE,则可以随时右键单击Generate Getters and Setters。大多数IDE都提供了生成功能。

然后对代码提出了额外的建议。

<c:forEach items = "${AllGrocery}" var = "p">

应改为

<c:forEach items = "${requestScope.AllGrocery}" var = "p">

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            request.setAttribute("AllGrocery", DataAccess.getAll());

            RequestDispatcher rd = getServletContext().getRequestDispatcher("/AllGrocery.jsp");

            rd.forward(request, response);
    }