我需要在jsp页面中显示来自servlet的数据。 目前我有这个:
SERVLET:
Object data = text;
request.setAttribute("data", data);
request.getRequestDispatcher("index.jsp").forward(request, response);
JSP:
<p>result: ${data}</p>
在JSP中有一个简单的文本框和一个发送按钮。 在我按下发送按钮的那一刻,每次都会覆盖响应。
我怎么能这样做,每次搜索后我都会看到新行中的结果? 我还希望看到以前的搜索......
非常感谢!
答案 0 :(得分: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);
将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中使用数组而不是简单对象
使用新值填充数组:Servlet
遍历数组并显示每个要显示为新行的项目
答案 2 :(得分:0)
您要将数据放入RequestScope
,必须将其添加到SessionScope
中才能查看以前的结果。
请参阅此示例:http://viralpatel.net/blogs/jsp-servlet-session-listener-tutorial-example-in-eclipse-tomcat/。
在JSP
中编写java代码并不是一个好习惯,因此您需要将逻辑移动到servlet中。但是这个例子描述了你需要的点。