JSP - 在response.sendRedirect之后不调用JSTL标记,但调用JSP表达式

时间:2014-07-23 08:10:11

标签: jsp session servlets jstl setattribute

servlet代码:

 HttpSession session = request.getSession(true);

 session.setAttribute("mapCarBean", mapCarBean);
 session.setAttribute("testing", mapCarBean.size());

 response.sendRedirect("/sasha/jsp/main.jsp");

jsp代码:

 <% System.out.println("was here"); %>

 ${sessionScope.testing}

 <c:choose>
      <c:when test="${not empty sessionScope.mapCarBean}">
          found
     </c:when>

     <c:otherwise>
         not found
     </c:otherwise>
 </c:choose>

 <c:forEach items="${mapCarBean}" var="entry">
     <ul>
         <li>${entry.value.getName()}</li>
     </ul>
 </c:forEach>

&#34;在这里&#34;重定向到jsp后打印,但没有执行任何jstl标记,直到手动刷新页面。即使选择也没有被称为

注意:我已经尝试过sessionScope.mapCarBean,它有同样的问题

解决方案:

拔掉头发后我终于找到了问题。我使用的是AJAX帖子,不会重定向。由于某种原因,它会执行JSP标记,但没有别的。我不确定为什么会这样,但希望这对其他读这篇文章的人都有帮助。

2 个答案:

答案 0 :(得分:1)

如果你的jsp中有这一行,请删除

<%@ page session="false" %>

它从页面中删除会话

答案 1 :(得分:0)

您是否在jsp中使用了这些代码;

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ page session="false"%>

在jsp中你可以编写$ {mapCarBean} .value.getName()而不用forEach

相关问题