如果从特定的servlet重定向,我想对JSP执行操作,否则什么也不做。是否可能?
在我的JSP中定义了不同的错误。此JSP调用servlet(contentType为application / pdf),它在新选项卡中打开并搜索PDF 25秒,然后如果找不到PDF,则重定向到同一个JSP,显示错误消息“File not found”。我想显示错误,如果从servlet调用,否则什么都不做。
JSP代码:
<%}else if(hPP!=null && hPP.get("errorcode")!=null && hPP.get("errorcode").toString().equalsIgnoreCase("Issue")){%>
<c:if test="${cameFromServlet}">
<div class="SplInputField">
<label class="FontBlod">Download fail</label>
</div>
</c:if>
servlet代码
if (content == null) {
request.setAttribute("cameFromServlet", true);
String redirectJspUrl = request.getParameter("homeRedirect");
String strReceiptPage =
redirectJspUrl.substring(0, redirectJspUrl.lastIndexOf("/")) +
"/GetQReceiptPage";
response.sendRedirect(strReceiptPage);
}
答案 0 :(得分:2)
像这样
在servlet中为请求添加一个属性httpservletRequest.setAttribute("cameFromServlet", true)
然后在JSP中检查它
<c:if test="${cameFromServlet}">
DO STUFF HERE
</c:if>
修改强>
您在编辑中所做的工作无效,因为您正在进行重定向。这意味着浏览器会收到302响应,告诉它针对新网址发出另一个请求。您是否有特定要求更改用户的URL?如果是这样,您将需要将cameFromServlet属性添加到会话中 - 如下所示:
req.getSession().setAttribute("cameFromServlet", true);
但是请记住,cameFromServlet
属性将保留在会话上,直到你取消设置为止如果有另一个时间显示jsp页面你会遇到问题,除非你做一些事情来取消它 - 通过在中间引入另一个servlet并将其从会话移动到请求 - 从而模拟Spring flash映射行为或在使用它之后在JSP中取消它 - 如下所示:
<c:remove var="cameFromServlet" scope="session" />
如果您不需要为用户更改URL,您可以更改您的servlet代码以使用请求调度程序(我认为您在做什么)
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/yourjsp.jsp");
requestDispatcher.forward(req, resp);