2016-11-20 1 views
2

Ich möchte eine Aktion für eine JSP ausführen, wenn sie von einem bestimmten Servlet nur umgeleitet wird, sonst nichts. Ist das möglich?Führen Sie eine Aktion auf JSP aus, wenn sie von einem Servlet umgeleitet wird.

In meiner JSP sind verschiedene Fehler definiert. Diese JSP ruft ein Servlet (mit contentType als application/pdf) auf, das in einem neuen Tab öffnet und nach einer PDF für 25 Sekunden sucht und dann, wenn PDF nicht gefunden wird, zur selben JSP umleitet, die die Fehlermeldung "Datei nicht gefunden" anzeigt. Ich möchte den Fehler anzeigen, wenn von Servlet nur sonst nichts getan wird.

JSP-Code:

<%}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-Code

if (content == null) { 
     request.setAttribute("cameFromServlet", true); 
     String redirectJspUrl = request.getParameter("homeRedirect"); 
     String strReceiptPage = 
     redirectJspUrl.substring(0, redirectJspUrl.lastIndexOf("/")) + 
      "/GetQReceiptPage"; 
     response.sendRedirect(strReceiptPage); 
    } 

Antwort

2

ein Attribut auf die Anfrage im Servlet hinzufügen ähnlichen

httpservletRequest.setAttribute("cameFromServlet", true) 

dann in Ihrem JSP-Check für sie

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

EDIT:

Was Sie in Ihrem bearbeiten getan haben, wird nicht funktionieren, da Sie eine Umleitung tun. Das bedeutet, dass der Browser eine 302-Antwort gesendet hat, um ihm mitzuteilen, dass er eine weitere Anfrage an die neue URL senden soll. Haben Sie eine spezielle Anforderung, die URL für den Benutzer zu ändern? Wenn dies der Fall müssen Sie das cameFromServlet Attribut auf die Sitzung statt hinzuzufügen - wie folgt aus:

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

Bare daran aber, dass cameFromServlet Attribut auf der Sitzung bleiben, bis Sie es unset so, wenn es eine andere Zeit war Wenn diese JSP-Seite angezeigt wird, treten Probleme auf, es sei denn, Sie machen etwas, um sie zu entschärfen - entweder indem Sie ein anderes Servlet in der Mitte einfügen und es von der Sitzung zur Anfrage verschieben - also Springs-Flash-Map-Verhalten simulieren oder in der JSP nach Ihnen aufheben habe es benutzt - so:

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

Wenn Sie nicht die URL müssen für den Benutzer ändern, können Sie Ihre Servlet-Code ändern Verwendung eines Anforderungsverteiler zu machen

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

Danke (was ich dachte, Sie taten) für JSTL tut (wenn der Test! =) funktioniert oder gibt es ein anderes Keyword für nicht? –

+0

Sie können verwenden! Oder das Wort nicht da ist auch ein vorhanden Schlüsselwort – saml

+0

es funktioniert nicht in meinem Fall.Sorry für grundlegende Q, aber ich bin neu in der Programmierwelt. Ich habe den JSP/Servlet-Code in der Q über –

Verwandte Themen