JSP与Servlet中cli.get()调用及属性获取报错问题
解决JSP中调用Cliente类getter方法出现"cannot find symbol"错误的问题
问题根源分析
你遇到的"cannot find symbol"错误,本质是两个核心问题:
- 你的
Cliente类仅定义了构造方法,但没有声明对应的成员属性,也未提供getDni()、getNombre()等Getter方法,导致JSP无法找到这些方法的定义。 - JSP页面可能未导入
Cliente类,无法识别该类的类型,进而无法解析其方法调用。
解决方案
1. 完善Cliente类,添加属性和Getter方法
修改Cliente类,添加私有成员变量,在构造方法中赋值,并为每个属性编写对应的Getter方法:
package Clases; public class Cliente { // 声明私有成员属性 private String dni; private String nombre; private String apellido; private String telefono; // 构造方法,为属性赋值 public Cliente(String dni, String nombre, String apellido, String telefono){ this.dni = dni; this.nombre = nombre; this.apellido = apellido; this.telefono = telefono; } // 提供Getter方法 public String getDni() { return dni; } public String getNombre() { return nombre; } public String getApellido() { return apellido; } public String getTelefono() { return telefono; } }
2. 在JSP页面中导入Cliente类并正确遍历列表
在MostrarJSP.jsp的顶部添加类导入语句,然后从Session中获取列表并遍历调用Getter方法:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!-- 导入Cliente类 --> <%@ page import="Clases.Cliente" %> <%@ page import="java.util.List" %> <html> <head> <title>Clientes</title> </head> <body> <h1>Lista de Clientes</h1> <table border="1"> <tr> <th>DNI</th> <th>Nombre</th> <th>Apellido</th> <th>Teléfono</th> </tr> <% // 从Session中获取客户列表 List<Cliente> listaClientes = (List<Cliente>) session.getAttribute("listaClientes"); if (listaClientes != null) { for (Cliente cli : listaClientes) { %> <tr> <td><%= cli.getDni() %></td> <td><%= cli.getNombre() %></td> <td><%= cli.getApellido() %></td> <td><%= cli.getTelefono() %></td> </tr> <% } } %> </table> </body> </html>
补充:完善Servlet的doPost方法(可选)
你的SvPrueba的doPost方法仅获取了请求参数,未将新创建的Cliente添加到Session的列表中。如果需要实现添加客户的功能,可以修改doPost方法:
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String dni = request.getParameter("dni"); String nombre = request.getParameter("nombre"); String apellido = request.getParameter("apellido"); String telefono = request.getParameter("telefono"); // 从Session获取现有列表,若不存在则创建新列表 HttpSession misession = request.getSession(); List<Cliente> listaClientes = (List<Cliente>) misession.getAttribute("listaClientes"); if (listaClientes == null) { listaClientes = new ArrayList<>(); } // 添加新客户 listaClientes.add(new Cliente(dni, nombre, apellido, telefono)); misession.setAttribute("listaClientes", listaClientes); // 重定向回显示页面 response.sendRedirect("MostrarJSP.jsp"); }
内容的提问来源于stack exchange,提问作者Tomyrex
相关产品推荐
相关产品推荐

