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
相关产品推荐
相关产品推荐

