2016-11-20 71 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代碼 –