jsp: transférer en Java sans utiliser de balise JSP?



Answers

Vous devriez vraiment essayer d'éviter les scriplets si vous le pouvez, et dans votre cas, une grande partie de ce que vous faites peut être remplacé par du code JSTL. Le remplacement suivant pour votre exemple est beaucoup plus propre, IMO:

<%
  // Consider moving to a servlet or controller/action class
  String errorMessage = SomeClass.getInstance().doSomething();
  pageContext.setAttribute("errorMessage", errorMessage);
%>
<c:choose>
  <c:when test="${not empty errorMessage}">
    <c:set var="error" scope="session" value="${errorMessage}" />
    <jsp:forward page="error.jsp" />
  </c:when>
  <c:otherwise>
    <c:redirect url="index.jsp" />
  </c:otherwise>
</c:choose>

Idéalement, vous devez modifier error.jsp pour que le message d'erreur n'ait même pas besoin d'être défini dans la session, mais je ne voulais pas trop modifier votre conception.

Question

Existe-t-il un Java pur équivalent à <jsp: forward page = "..." /> que je peux utiliser dans un bloc <% ...%>?

Par exemple, j'ai actuellement une page JSP quelque chose comme ceci:

<%
    String errorMessage = SomeClass.getInstance().doSomething();
    if (errorMessage != null) {
        session.setAttribute("error", errorMessage);
%>
<jsp:forward page="error.jsp" />
<%
    } else {
        String url = response.encodeRedirectURL("index.jsp");
        response.sendRedirect(url);
    }
%>

Avoir à casser le bloc <% ...%> pour utiliser le jsp: forward est moche et rend la lecture plus difficile à cause de l'indentation, entre autres choses.

Alors, puis-je faire l'avant dans le code Java sans utiliser le tag JSP?

Quelque chose comme ça serait idéal:

<%
    String errorMessage = SomeClass.getInstance().doSomething();
    if (errorMessage != null) {
        session.setAttribute("error", errorMessage);
        someObject.forward("error.jsp");
    } else {
        String url = response.encodeRedirectURL("index.jsp");
        response.sendRedirect(url);
    }
%>





Links