【问题标题】:Updating the table created in JSP using the values sent from the form (No database)使用从表单发送的值更新在 JSP 中创建的表(无数据库)
【发布时间】:2017-12-27 04:17:00
【问题描述】:

我有两个文件。一个是 index.jsp,另一个是 users.java。

在 index.jsp 中,我有两个文本字段来接受用户名和电话号码。这被发送到 users.java servlet。值存储在会话中,并使用 RequestDispatcher 发送回相同的 index.jsp。我需要将这些值显示在表格中,并在使用更新值提交表单时不断更新此表格。

到目前为止,我可以将值返回到表中,但是当提交新表单时,旧行被新行替换,导致表只有一行。 如何通过追加行来更新表格?

这里是 index.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>PRODUCTS</title>
</head>
<body>
    <form action=sample method="POST">
            <pre>User Name        Phone Number</pre>
            <pre><input type="text" name="userName">    <input type="text" name="phoneNumber"></pre><br>
            <input type="submit" value="submit">
    </form>

        <pre>
            <table id=prod border=1>
            <tr>
            <th> User Name</th>
            <th> Phone Number </th>
            </tr>
            <div id="output">
                    ${requestScope.Output }
            </div>
            </table>
        </pre>


</body>
</html>

这是 user.java 代码(我现在必须将值存储在会话中,以便以后使用。不知道如何保留表中的旧行)

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/sample")
public class sample extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public sample() {

        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }   

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            HttpSession session=request.getSession();
            String userName = request.getParameter("userName");
            String phoneNumber= request.getParameter("phoneNumber");
            session.setAttribute("uName",userName);
            session.setAttribute("phNo",phoneNumber);
            StringBuffer Output= new StringBuffer();

            String add="<tr><td>"+session.getAttribute("uName")+"</td><td>"+session.getAttribute("phNo")+"</td></tr>";
            Output.append(add);
            request.setAttribute("Output",Output);
            request.getRequestDispatcher("/index.jsp").forward(request, response);



    }

我得到的表格有一行包含用户名和电话号码。但是当我输入新的用户名和电话号码并提交表单时,表格将用新行替换旧行。我需要附加行。怎么做?

【问题讨论】:

  • 在这种情况下,您需要一个应该设置的字符串列表。
  • 保存从 index.jsp 传递的值的字符串列表?会尝试的。谢谢@ScaryWombat

标签: java jsp session servlets


【解决方案1】:

我想您可以尝试将数据存储到数组中,因为您正在避免使用数据库并在查看表格时使用JSTL 函数来调用它。

【讨论】:

    【解决方案2】:

    您可以使用session。尝试更改此行:

        String add = "<tr><td>" + session.getAttribute("uName") + "</td><td>" + session.getAttribute("phNo")
                + "</td></tr>";
    

    到:

        String add = (session.getAttribute("Output") != null ? session.getAttribute("Output") : "") + "<tr><td>" + session.getAttribute("uName") + "</td><td>" + session.getAttribute("phNo")
                + "</td></tr>";
        session.setAttribute("Output", Output);
    

    【讨论】:

      【解决方案3】:

      将此行放在您的 jsp 顶部,然后您的会话将被维护,并且不会创建新会话

      【讨论】:

        【解决方案4】:

        问题是线

         StringBuffer Output= new StringBuffer();
        

        这里你每次都会创建一个新的 StringBuffer 对象,这会导致用新值替换旧值

        我更新了你的 servlet 代码并且

        response.setContentType("text/html;charset=UTF-8");
            String userName = request.getParameter("userName");
            String phoneNumber = request.getParameter("phoneNumber");
            HttpSession session = request.getSession();
            //get the session from request, if exists return current else creates a new one
            StringBuilder sb;
            if (session.isNew()) {
                sb = new StringBuilder();
                //if session is new, it will create a new object
            } else {
                sb = (StringBuilder) session.getAttribute("Output");
                //if session is old, it will get the Output object from it
                if (sb == null) {
                    sb = new StringBuilder();
                    /* To be safe from NullPointerException, if session is created but failed to get from session
                     */
                }
            }
            String add = "<tr><td>" + userName + "</td><td>" + phoneNumber + "</td></tr>";
            //here no need to set and get username and phone num from sessions
            sb.append(add);
            session.setAttribute("Output", sb);
            request.getRequestDispatcher("/index.jsp").forward(request, response);
        

        还有一个 JSP 文件的更新

        ${requestScope.Output } 更改为${Output}

        你会得到你想要的。 希望对你有帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-23
          • 2012-05-09
          • 2015-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多