2016-01-28 63 views
0

我正在學習jsp,servlets等等。我得到一個異常,我只是無法找出錯誤。我有點知道El無法找到錯誤的字段,但我的JavaBean很好。傳遞給jsp頁面的列表也很好。 已經改變了jsp和servlet很多,異常繼續。javax.el.PropertyNotFoundException:

希望some1能給我一隻手。

繼承人的代碼和堆棧跟蹤:

堆棧跟蹤:

SEVERE: Servlet.service() for servlet jsp threw exception 
    javax.el.PropertyNotFoundException: Property 'nome' not found on type  java.lang.String 
    at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:268) 
    at javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:221) 
    at javax.el.BeanELResolver.property(BeanELResolver.java:355) 
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:95) 
    at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) 
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:943) 
    at org.apache.jsp.admin.buscar_jsp._jspx_meth_c_005fforEach_005f0(buscar_jsp.java:253) 
    at org.apache.jsp.admin.buscar_jsp._jspx_meth_c_005fif_005f0(buscar_jsp.java:215) 
    at org.apache.jsp.admin.buscar_jsp._jspService(buscar_jsp.java:162) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:719) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:465) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:390) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:317) 
    at control.ControleProduto.buscar(ControleProduto.java:140) 
    at control.ControleProduto.execute(ControleProduto.java:65) 
    at control.ControleProduto.doPost(ControleProduto.java:46) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

Excessa no buscar An exception occurred processing JSP page /admin/buscar.jsp at line 33 

30:    </tr> 
31:    <c:forEach items="lista" var="prod"> 
32:      <tr> 
33:       <td>${prod.nome }</td> 
34:       <td>${prod.estoque }</td> 
35:       <td><fmt:formatNumber value="${prod.preco}" type="currency"/> </td> 
36:       <td> <fmt:formatDate value="${prod.validade}" pattern="dd/MM/yyyy" /> </td> 


Stacktrace: 
org.apache.jasper.JasperException: An exception occurred processing JSP page /admin/buscar.jsp at line 33 

30:    </tr> 
31:    <c:forEach items="lista" var="prod"> 
32:      <tr> 
33:       <td>${prod.nome }</td> 
34:       <td>${prod.estoque }</td> 
35:       <td><fmt:formatNumber value="${prod.preco}" type="currency"/> </td> 
36:       <td> <fmt:formatDate value="${prod.validade}" pattern="dd/MM/yyyy" /> </td> 


Stacktrace: 
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:574) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:719) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:465) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:390) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:317) 
    at control.ControleProduto.buscar(ControleProduto.java:140) 
    at control.ControleProduto.execute(ControleProduto.java:65) 
    at control.ControleProduto.doPost(ControleProduto.java:46) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.el.PropertyNotFoundException: Property 'nome' not found on type java.lang.String 
    at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:268) 
    at javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:221) 
    at javax.el.BeanELResolver.property(BeanELResolver.java:355) 
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:95) 
    at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) 
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:943) 
    at org.apache.jsp.admin.buscar_jsp._jspx_meth_c_005fforEach_005f0(buscar_jsp.java:253) 
    at org.apache.jsp.admin.buscar_jsp._jspx_meth_c_005fif_005f0(buscar_jsp.java:215) 
    at org.apache.jsp.admin.buscar_jsp._jspService(buscar_jsp.java:162) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    ... 38 more 

繼承人的豆:

package entity; 

import java.util.Date; 
import java.util.GregorianCalendar; 

public class Produto { 

    private Integer idProduto; 
    private String nome; 
    private Integer estoque; 
    private Double preco; 
    private Date validade; 

    /* 
    * Produto tem uma Categoria 
    */ 
    private Categoria categoria; 

    public Produto(Integer idProduto, String nome, Integer estoque, 
      Double preco, Date validade) { 
     super(); 
     this.idProduto = idProduto; 
     this.nome = nome; 
     this.estoque = estoque; 
     this.preco = preco; 
     this.validade = validade; 
    } 

    public Produto() { 
     super(); 
    } 

    public Categoria getCategoria() { 
     return categoria; 
    } 
    public void setCategoria(Categoria categoria) { 
     this.categoria = categoria; 
    } 
    public Integer getIdProduto() { 
     return idProduto; 
    } 
    public void setIdProduto(Integer idProduto) { 
     this.idProduto = idProduto; 
    } 
    public String getNome() { 
     return nome; 
    } 
    public void setNome(String nome) { 
     this.nome = nome; 
    } 
    public Integer getEstoque() { 
     return estoque; 
    } 
    public void setEstoque(Integer estoque) { 
     this.estoque = estoque; 
    } 
    public Double getPreco() { 
     return preco; 
    } 
    public void setPreco(Double preco) { 
     this.preco = preco; 
    } 
    public Date getValidade() { 
     return validade; 
    } 
    public void setValidade(Date validade) { 
     this.validade = validade; 
    } 

    public static Date converterData(String data){ 
     String[] novaData = data.split("/"); 
     GregorianCalendar cal = new GregorianCalendar(
       new Integer(novaData[2]), 
       new Integer(novaData[1]) - 1, 
       new Integer(novaData[0])); 
     return cal.getTime(); 
    } 


    @Override 
    public String toString() { 
     return "Produto [idProduto=" + idProduto + ", nome=" + nome 
       + ", estoque=" + estoque + ", preco=" + preco + ", validade=" 
       + validade + "]"; 
    } 


} 

JSP頁面:

Topo.jsp

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

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Sistema de Controle de Produtos</title> 
<!-- CSS Styles --> 
<link rel="stylesheet" type="text/css" 
    href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.min.css"> 
<!-- Tabela com cores diferentes --> 
<link rel="stylesheet" type="text/css" 
    href="${pageContext.request.contextPath}/css/tabelacomcores.css"> 


</head> 
<body> 

    <!-- Como criar submenus? --> 
    <div class="container" > 
     <div class="col-xs-12"> 
      <ul class="nav nav-pills"> 
       <li><a href="index.jsp">Cadastrar</a></li> 
       <li><a href="buscar.jsp">Consultar</a></li> 
       <li><a href="#">Sair</a>    

      </ul> 
     </div> <!-- Menu --> 

rodape.jsp

</div> 

</div> <!-- container --> 

</body> 
</html> 

buscar.jsp

<jsp:include page="topo.jsp"></jsp:include> 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
<!-- Format library --> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 


<h3 class="page-header">Buscar produtos</h3> 

<form method="post" action="buscar.html"> 
    <div class="form-group"> 
     Nome : 
     <input type="text" name="nome" value="${nome}" class="form-control"> 
    </div> 
    <input type="submit" value="Buscar" class="btn btn-primary"> 
</form> 

    ${msg } 

    <c:if test="${fn:length(lista)>0}"> 
     <table class="table table-bordered"> 
      <tr> 
       <th>Nome</th> 
       <th>Estoque</th> 
       <th>Preco</th> 
       <th>Validade</th> 
       <th>Categoria</th> 
       <th></th> 
      </tr> 
      <c:forEach items="lista" var="prod"> 
        <tr> 
         <td>${prod.nome }</td> 
         <td>${prod.estoque }</td> 
         <td><fmt:formatNumber value="${prod.preco}" type="currency"/> </td> 
         <td> <fmt:formatDate value="${prod.validade}" pattern="dd/MM/yyyy" /> </td> 
         <td>${prod.categoria.nomeCategoria }</td> 
         <td> 
          <a href="editar.html?id=${prod.idProduto}" class="btn btn-warning">Editar</a> 
          <a href="excluir.html?id=${prod.idProduto}" class="btn btn-danger" 
           onclick="return confirm('Deseja excluir realmente o produto?')">Excluir</a> 
         </td> 
       </tr> 
      </c:forEach> 
     </table> 
    </c:if> 

    <jsp:include page="rodape.jsp"></jsp:include> 

Dao.java

package persistence; 

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

public class Dao { 

    Connection con; 
    PreparedStatement stmt; 
    ResultSet rs; 

    private final String URL = "jdbc:mysql://localhost:3306/aula"; 
    private final String USER = "root"; 
    private final String PASS = "something"; 

    protected void open()throws Exception{ 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection(URL, USER, PASS); 
    } 

    protected void close()throws Exception{ 
     if(rs != null) 
      rs.close(); 

     if(stmt != null) 
      stmt.close(); 

     if(con != null) 
      con.close(); 
    } 

} 

ProdutoDao.java

package persistence; 

import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.List; 

import entity.Categoria; 
import entity.Produto; 

public class ProdutoDao extends Dao { 

    public void cadastrar(Produto prod)throws Exception{ 
     open(); 

     stmt = con.prepareStatement("insert into produto (nome,estoque,preco,validade,idCategoria)" 
       + " values(?,?,?,?,?)"); 

     stmt.setString(1, prod.getNome()); 
     stmt.setInt(2, prod.getEstoque()); 
     stmt.setDouble(3, prod.getPreco()); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     stmt.setString(4, sdf.format(prod.getValidade())); 
     stmt.setInt(5, prod.getCategoria().getIdCategoria()); 

     stmt.execute(); 

     close(); 
    } 

    public List<Produto> buscar(String nome)throws Exception{ 
     open(); 

     stmt = con.prepareStatement("select * from produto inner join categoria " 
       + " on produto.idcategoria = categoria.idcategoria where nome like ?"); 
     stmt.setString(1, nome + "%"); 

     rs = stmt.executeQuery(); 
     List<Produto> lista = new ArrayList<Produto>(); 

     while(rs.next()){ 
      Produto prod = new Produto(rs.getInt("idproduto"), rs.getString("nome"), 
        rs.getInt("estoque"), rs.getDouble("preco"), rs.getDate("validade")); 
      Categoria cat = new Categoria(rs.getInt("idcategoria"), 
        rs.getString("nomecategoria")); 
      prod.setCategoria(cat); 
      lista.add(prod); 
     } 
     close(); 
     return lista; 
    } 


    /** 
    * Busca pela ID do produto 
    * @param id 
    * @return 
    * @throws Exception 
    */ 
    public Produto buscar(int id) throws Exception{ 
     open(); 

     stmt = con.prepareStatement("select * from produto inner join categoria " 
       + " on idcategoria = idcategoria where idproduto = ?"); 
     stmt.setInt(1, id); 
     Produto prod = null; 
     rs = stmt.executeQuery(); 
     if(rs.next()){ 
      prod = new Produto(rs.getInt("idproduto"), rs.getString("nome"), 
        rs.getInt("estoque"), rs.getDouble("preco"), rs.getDate("validade")); 
      Categoria cat = new Categoria(rs.getInt("idcategoria"), 
        rs.getString("nomecategoria")); 
      prod.setCategoria(cat); 
     } 
     close(); 
     return prod; 
    } 

    public void excluir(int id)throws Exception{ 
     open(); 
     stmt = con.prepareStatement("delete from produto where idproduto = ?"); 
     stmt.setInt(1, id); 
     stmt.execute(); 
     close(); 
    } 


    public void editar(Produto prod)throws Exception{ 
     open(); 
     stmt = con.prepareStatement("update produto set nome = ?, estoque = ?, preco = ?, " 
       + " validade = ?, categoria_idcategoria = ? where idproduto = ?"); 
     stmt.setString(1, prod.getNome()); 
     stmt.setInt(2, prod.getEstoque()); 
     stmt.setDouble(3, prod.getPreco()); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     stmt.setString(4, sdf.format(prod.getValidade())); 
     stmt.setInt(5, prod.getCategoria().getIdCategoria()); 
     stmt.setInt(6, prod.getIdProduto()); 

     stmt.execute(); 
     close(); 

    } 
} 

回答

0

對不起,我只是知道。

c:forEach items =必須用於參數「$ {lista}」,而不僅僅是「lista」。

已解決。不管怎麼說,還是要謝謝你。

相關問題