有没有办法在servlet会话中创建“一次性使用”属性?

时间:2014-09-08 19:31:06

标签: java jsp servlets attributes

在我的一个Servlet中,如果出现错误,我想将message传递给JSP。

例如,如果页面已加载且一切正常,则JSP将不会为该行打印任何内容

<p class="text-center red">${message}</p>

但是如果Servlet设置了message属性,我希望message显示在页面中。

我尝试在转发到JSP页面后关闭该属性,但它无法正常工作

   request.getSession().setAttribute("result", "No reports from New York State today please");
   request.getRequestDispatcher("/resources/jsp/create_report.jsp").forward(request, response);
   request.getSession().setAttribute("result", null);

有没有办法设置只出现在一个JSP页面上然后消失或自动停用的属性?我怎么能做到这一点?

3 个答案:

答案 0 :(得分:1)

&#34;一次性使用&#34; 是请求属性的定义(一次意味着服务一个请求)。

如果您需要&#34;一次性使用&#34;,请使用ServletRequest.setAttribute()ServletRequest.getAttribute()将其存储在请求中。

ServletRequest.setAttribute()的Javadoc:

  

在此请求中存储属性。在请求之间重置属性。此方法通常与RequestDispatcher一起使用。

答案 1 :(得分:1)

由于之前的答案已声明使用请求而非会话。

变化:

 request.getSession().setAttribute("result", "No reports from New York State today please");

request.setAttribute("result", No reports from New York State today please");

并且在JSP中也使用JSTL而不是scriptlet:

<p class="text-center red">${result}</p>

答案 2 :(得分:0)

只需将属性设置为HttpServletRequest,而不是Session

request.setAttribute("result", "No reports from New York State today please");

在你的JSP中简单地说:

<%=(String)request.getAttribute("result")%>