在jsp中显示来自servlet的数据但不覆盖当前值

时间:2012-09-14 10:40:00

标签: java jsp servlets

我需要在jsp页面中显示来自servlet的数据。 目前我有这个:

SERVLET:

Object data = text;
request.setAttribute("data", data);
request.getRequestDispatcher("index.jsp").forward(request, response);

JSP:

<p>result: ${data}</p>

在JSP中有一个简单的文本框和一个发送按钮。 在我按下发送按钮的那一刻,每次都会覆盖响应。

我怎么能这样做,每次搜索后我都会看到新行中的结果? 我还希望看到以前的搜索......

非常感谢!

3 个答案:

答案 0 :(得分:1)

你有几个选择:

  1. 将当前值发送到服务器,进行搜索并在那里附加新结果,然后将整个字符串发送回Request中的JSP以再次显示全部。如果您仍希望在<input>中显示<input type="hidden">而不是输入字段,则必须将值包装在data标记中,可能为<p>

    JSP:

    <input type="hidden" name="oldData" value="${data}"/>
    <p>result: ${data}</p>
    

    Servlet:

    Object newData = text;
    Object oldData = request.getParameter("oldData");
    request.setAttribute("data", oldData + "<br/>" + newData);
    request.getRequestDispatcher("index.jsp").forward(request, response);
    
  2. data的所有值存储在会话范围中,然后从servlet中追加它。 JSP必须从会话范围而不是请求输出值。在此示例中,值存储在唯一的连接String中。它可能更好地将data的每个值存储在数据结构中,例如List,并在JSP中迭代它,以便分隔符保留在视图中。

    JSP:

    <c:if test="${not empty sessionScope.data}">
        <p>result: ${sessionScope.data}</p>
    </c:if>
    

    Servlet:

    Object newData = text;
    Object oldData = request.getSession().getAttribute("data");
    request.getSession().setAttribute("data", oldData + "<br/>" + newData);
    request.getRequestDispatcher("index.jsp").forward(request, response);
    

答案 1 :(得分:0)

1.在servlet中使用数组而不是简单对象

  1. 使用新值填充数组:Servlet

  2. 遍历数组并显示每个要显示为新行的项目

答案 2 :(得分:0)

您要将数据放入RequestScope,必须将其添加到SessionScope中才能查看以前的结果。

请参阅此示例:http://viralpatel.net/blogs/jsp-servlet-session-listener-tutorial-example-in-eclipse-tomcat/

JSP中编写java代码并不是一个好习惯,因此您需要将逻辑移动到servlet中。但是这个例子描述了你需要的点。