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

Servlet和JSP更新MySQL失败:Pelaajaid无法识别求助

无法识别Pelaajaid导致MySQL更新失败的问题排查与修复

我帮你梳理了代码里几个关键的问题,都是新手容易踩的坑,咱们一个个来解决:

1. Servlet的doGet方法逻辑顺序完全搞反了

你现在的doGet方法先执行了请求转发,后面获取pelaajaid的代码根本不会被执行!这就导致编辑页面完全拿不到要修改的玩家ID,自然没法传递给后续的更新操作。

修复后的doGet代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 先获取列表页传过来的pelaajaid
    String pelaajaidStr = request.getParameter("pelaajaid");
    if (pelaajaidStr != null) {
        int pelaajaid = Integer.parseInt(pelaajaidStr);
        // 把ID存到request里,让JSP页面能拿到
        request.setAttribute("pelaajaid", pelaajaid);
    }
    // 处理完参数再转发到编辑页面
    request.getRequestDispatcher("/WEB-INF/muokkaa.jsp").forward(request, response);
}

2. 编辑JSP的表单没携带Pelaajaid,还加了错误的跳转

你的表单里没有隐藏字段来传递玩家ID,提交POST请求时,Servlet根本拿不到pelaajaid参数,直接就会抛出空指针/转换异常。另外,提交按钮的onclick会让页面直接跳转,表单的POST请求根本没机会发送!

修复后的编辑JSP代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="ISO-8859-1">
    <title>Tietojen muokkaus</title>
    <style>body { background-color: powderblue; }</style>
</head>
<body>
<h1>Muokkaa Pelaajaa ja Nykyiset pelaajat</h1>
<form action="/muokkaa-pelaajaa" method="post">
    <!-- 新增隐藏字段,携带要修改的玩家ID -->
    <input type="hidden" name="pelaajaid" value="<c:out value='${pelaajaid}'/>" />
    
    Nimi: <input type="text" name="nimi" /><br>
    Pelipaikka: <input type="text" name="pelipaikka" /><br>
    Palkka: <input type="text" name="palkka" /><br>
    Ika: <input type="text" name="ika" /><br>
    
    <!-- 移除submit按钮的onclick,让表单正常提交 -->
    <input type="submit" value="Valmis" />
    <input type="button" value="Peruuta" onclick="window.location.href = 'http://localhost:8080/listaa-pelaajat'">
</form>
</body>
</html>

3. doPost方法里参数获取写错了

你把palkka的参数写成了request.getParameter("ika"),这会导致薪资和年龄的数据错乱,即使更新成功,数据也是错的:

修复后的参数获取代码:

// 原来的错误代码:
// String palkka = request.getParameter("ika");
// 改成正确的:
String palkka = request.getParameter("palkka");
String ika = request.getParameter("ika");

额外小建议:增加空参数判断

作为新手,建议你在转换字符串为整数前先判断参数是否为空,避免不必要的异常:

String pelaajaidStr = request.getParameter("pelaajaid");
if (pelaajaidStr == null || pelaajaidStr.isEmpty()) {
    request.setAttribute("viesti", "Pelaaja ID puuttuu");
    request.getRequestDispatcher("/WEB-INF/tapahtumaraportti.jsp").forward(request, response);
    return;
}
int pelaajaid = Integer.parseInt(pelaajaidStr);

按照上面的修改,你的更新操作应该就能正常识别Pelaajaid并执行MySQL更新了。

内容的提问来源于stack exchange,提问作者Calgy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:22:28