将数据从JSP传递到Servlet

3

根据标题所述,我需要将数据从我的JSP页面传递到我的servlet。 我从数据库中加载数据到我的JSP页面表单中。 现在用户应该能够更改这些数据。 因此,我必须将更改后的数据发送回我的servlet以更新数据库。 因此,我想在我的servlet中使用doPost()方法。

这是我的JSP页面:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="content-script-type" content="text/javascript" />
    <meta http-equiv="content-style-type" content="text/css" />
    <meta http-equiv="content-language" content="de" />

    <link href="../resources/css/basic.css" type="text/css" rel="stylesheet" />

    <title>Edit Movie</title>
</head>

<body>
    <div id="wrapper">
        <h2 id="title">Edit Person</h2>
        <br></br>
        <br></br>
        <form id="1" class="appnitro"  method="post" action="">                     
            <ul>
                <li id="li_1" >
                    <label class="description" for="element_1">Name</label>
                    <div>
                        <input id="element_1" name="element_1" class="element text large" type="text" maxlength="255" value="${requestScope.person.name}"/> 
                    </div> 
                </li>       
                <li id="li_2" >
                    <label class="description" for="element_2">Deparment</label>
                    <div>
                        <input id="element_2" name="element_2" class="element text large" type="text" maxlength="255" value="${requestScope.person.department}"/> 
                    </div> 
                </li>   
                <li id="li_3" >
                    <label class="description" for="element_3">Job</label>
                    <div>
                        <input id="element_3" name="element_3" class="element text large" type="text" maxlength="255" value="${requestScope.person.job}"/> 
                    </div> 
                </li>       
                <li id="li_4" >
                    <label class="description" for="element_4">Biographie</label>
                    <div>
                        <textarea id="element_4" name="element_4" class="element textarea medium">${requestScope.person.biography}</textarea> 
                    </div> 
                </li>
                <li class="buttons">
                    <input type="hidden" name="form_id" value="652973" />
                    <input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" />
                </li>
            </ul>
        </form>                 
    </div>
</body>
</html>

这是我的没有doPost()方法的Servlet:
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import de.hof.university.spj.model.People;
import de.hof.university.spj.model.PeopleDAO;

public class SinglePersonEditServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private PeopleDAO peopleDao = new PeopleDAO();

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        String name = "id";
        String value = request.getParameter(name);

        int id = Integer.parseInt(value);

        People people = peopleDao.getPerson(id);

        request.setAttribute("person", people);

        RequestDispatcher reqDispatcher = request.getRequestDispatcher("../jsp/singlePersonEdit.jsp");
        reqDispatcher.forward(request, response);
    }
}

在提交按钮被按下后,我想将更改后的数据发送到我的Servlet,以便将其存储在数据库中。

1个回答

5

为什么要使用String name = "id"; String value = request.getParameter(name);?我在你的JSP中找不到任何输入是name = "id" ...

在servlet中,您应该有以下内容(例如):

String element_1_value = request.getParameter("element_1") ;

您可能忘记了ID为name的输入框,或者我漏掉了些什么。无论哪种情况,这是您需要在代码中修复的问题。

更不用说您忘记在表单标签的action属性中插入servlet的名称,因此您得到了这个:

<form id="1" class="appnitro"  method="post" action="">

Which should become this :

<form id="1" class="appnitro"  method="post" action="SinglePersonEditServlet">

最后,你的操作方法是"post"(如上面的两行代码所示),在你的问题的servlet片段中,你使用doGet,除非已经完成,否则你应该将你的代码放在doPost中,否则只需要在doPost内调用doGet即可。
我自己也是一个初学者,所以我能看到一个,我们都从某个地方开始,我建议你参考这个totu或者任何关于“使用servlet处理表单数据”的良好搜索。
注意:重复问题的链接,进一步了解 :)。
问候。

这是来自另一个网站的内容!!! 我有一个名为people.jsp的网站,其中包含指向单个人的链接:<button id="tableButton" type="button" onclick="window.location.href='../servlets/SinglePersonEditServlet?id=${requestScope.person.personID}';">Bearbeiten</button>String name="id",我需要从数据库中选择具有给定id的人并将其提供给上面发布的jsp网站。我的第一个输入是正确的,因为我希望文本字段显示数据库中实际保存的数据。现在用户应该能够更改文本字段输入。这就是我想要提供给我的servlet的内容。 - Mulgard
那就好,保留 value="${requestScope.person.name}" 在你的元素中。但是对于其余部分,我认为你缺少一些基本概念来使其正常运行。我编辑了我的答案,请看看 :) - Akheloes
否则:哪里有属性name 值为id的元素? - Akheloes
doget方法中的代码是为另一个机制而设计的... doget代码在这个问题中可以完全忽略^^ 我需要编写一个dopost方法,但我实际上不知道如何将我的表单信息传递到该dopost方法中。但我认为你已经写过了:"String element_1_value = request.getParameter("element_1") ;" 我会测试它。 - Mulgard
哦,我认为您需要稍微澄清一下您的问题,因为您想从表单中获取数据到一个servlet中(它将对其进行任何您想要做的操作)。确实,您需要传递表单中某个输入的name属性的值getParameter。不要忘记填写action属性,就像我说的一样 :)。 - Akheloes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接