2016-11-20 3 views
2

Je souhaite effectuer une action sur une JSP si elle est redirigée à partir d'une servlet spécifique. Sinon, rien d'autre n'est possible. Est-ce possible?Effectuer une action sur JSP en cas de redirection à partir d'une servlet

Dans mon JSP, différentes erreurs sont définies. Cette JSP appelle une servlet (avec contentType en tant qu'application/pdf) qui s'ouvre dans un nouvel onglet et recherche un PDF pendant 25 secondes, puis si le PDF n'est pas trouvé redirige vers le même JSP qui affiche le message d'erreur "Fichier non trouvé". Je veux montrer l'erreur si appelé du servlet seulement ne fait rien d'autre.

code 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> 

code servlet

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

Répondre

2

Ajouter un attribut à la demande dans le servlet comme celui-ci

httpservletRequest.setAttribute("cameFromServlet", true) 

puis dans votre chèque de JSP pour elle

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

EDIT:

Qu'est-ce que vous avez fait dans votre édition ne fonctionnera pas, puisque vous faites une redirection. Ce qui signifie que le navigateur reçoit une réponse 302 pour lui indiquer d'émettre une autre requête par rapport à la nouvelle URL. Avez-vous une exigence spécifique pour changer l'URL de l'utilisateur? Dans ce cas, vous devrez ajouter l'attribut cameFromServlet à la session au lieu - comme ceci:

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

nu à l'esprit cependant, que cameFromServlet attribut restera sur la session jusqu'à ce que vous la désélectionner s'il y avait une autre fois Cette page jsp vous montrera que vous rencontrerez des problèmes si vous ne faites rien pour l'annuler - soit en introduisant une autre servlet au milieu et en la déplaçant de la session à la requête - simulant ainsi le comportement de la carte flash de Springs ou la désinstallant dans la JSP. l'ai utilisé - comme ceci:

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

Si vous n'avez pas besoin l'URL changer pour l'utilisateur, vous pouvez modifier votre code de servlet pour utiliser un répartiteur de demande (ce que je pensais que vous faisiez)

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

Merci pour JSTL fait (si le test! =) fonctionne ou existe-t-il un autre mot-clé pour non? –

+0

Vous pouvez utiliser! Ou le mot pas là est aussi un mot-clé existant – saml

+0

cela ne fonctionne pas dans mon cas. Désolé pour Q de base mais je suis nouveau dans le monde de la programmation. J'ai ajouté le code JSP/servlet dans le Q ci-dessus –