2016-11-20 62 views
2

如果只从特定的servlet重定向,我想对JSP执行操作,否则什么也不做。是否有可能?如果从servlet重定向,请对JSP执行操作

在我的JSP中定义了不同的错误。这个JSP调用一个servlet(contentType为application/pdf),它在新标签页中打开并搜索25秒的PDF,然后如果未找到PDF,则重定向到显示错误消息“找不到文件”的相同JSP。我想显示错误,如果从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); 
    } 

回答

2

添加到请求的属性在servlet这样

httpservletRequest.setAttribute("cameFromServlet", true) 

然后在你的JSP检查它

<c:if test="${cameFromServlet}"> 
    DO STUFF HERE 
</c:if> 

编辑:

你在你的编辑都做是行不通的,因为你正在做一个重定向。这意味着浏览器会发送一个302响应来告诉它发出针对新网址的另一个请求。你有具体的要求来更改用户的网址吗?如果是这样,你需要将cameFromServlet属性添加到会话,而不是 - 是这样的:

req.getSession().setAttribute("cameFromServlet", true);

裸记住,虽然,这cameFromServlet属性将保留在会话,直到你取消它,所以如果有另一个时间即显示jsp页面,否则将遇到问题,除非您通过在中间引入另一个servlet并将其从会话中移至请求来执行某些操作,从而模拟Spring闪存映射行为或在JSP中将其取消设置已经使用它 - 像这样:

<c:remove var="cameFromServlet" scope="session" /> 

如果你不需要的URL更改用户,你可以改变你的servlet代码使用一个请求分发的(我还以为你在做)

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/yourjsp.jsp"); 
requestDispatcher.forward(req, resp); 
+0

谢谢JSTL做(如果测试!= )的作品或有任何其他关键字不是? –

+0

你可以使用!或者这个词不存在也存在关键字 – saml

+0

它不起作用在我的case.Sry for基本Q,但我是编程世界的新手。我已经在Q上面添加了JSP/servlet代码 –