You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:05:21