التخطيط الاستراتيجي المشترك: إلى الأمام في جاوة دون استخدام العلامة JSP؟

StackOverflow https://stackoverflow.com/questions/245236

  •  05-07-2019
  •  | 
  •  

سؤال

هل هناك ما يعادل جافا نقية ل<التخطيط الاستراتيجي المشترك: الصفحة إلى الأمام = "..." /> التي يمكن استخدامها ضمن <٪ ...٪> منع

وعلى سبيل المثال، لدي حاليا صفحة JSP شيئا من هذا القبيل:

<%
    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);
    }
%>

والحاجة إلى كسر كتلة <٪ ...٪> استخدام التخطيط الاستراتيجي المشترك: إلى الأمام هو قبيح ويجعل من الصعب قراءة بسبب المسافة البادئة، من بين أمور أخرى

وهكذا، يمكن أن أفعل قدما في كود جافا دون استخدام علامة JSP؟

وشيء من هذا القبيل سيكون امرا مثاليا:

<%
    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);
    }
%>
هل كانت مفيدة؟

المحلول

ووsomeObject كنت تبحث عن <لأ href = "http://java.sun.com/products/jsp/2.1/docs/jsp-2_1-pfd2/javax/servlet/jsp/PageContext.html#forward (java.lang.String) "يختلط =" noreferrer "> pageContext .

ويعرف هذا الكائن ضمنيا في JSP، حتى تتمكن من استخدامها مثل هذا:

pageContext.forward("<some relative jsp>");

نصائح أخرى

هل حقا ينبغي أن نحاول وتجنب scriplets إذا كنت تستطيع، وفي قضيتك، والكثير من ما تقومون به يمكن استبدالها مع رمز JSTL. استبدال التالية على سبيل المثال هو أنظف بكثير والمنظمة البحرية الدولية:

<%
  // 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>

وبشكل مثالي، وكنت تعديل error.jsp بحيث لا يحتاج رسالة الخطأ حتى يتم تعيين في الدورة، ولكن لم أكن أريد لتغيير التصميم الخاص بك كثيرا.

ونهج بسيط:

<%@page errorPage="Error.jsp" %>

<%
 String errorMessage = SomeClass.getInstance().doSomething();
 if (errorMessage != null) {
       throw new Exception(errorMessage); // Better throw the exception from doSomething()
 }
 pageContext.forward("index.jsp");
%>


Error.jsp
.........
<%@ page isErrorPage='true' %>
<%
out.print("Error!!!");  
out.print(exception.getMessage());
%>

ونهج أفضل:

واستدعاء تنفيذ DoSomething () من بريمج. تعيين الصفحة خطأ الخاص بك في web.xml

<error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/WEB-INF/jsp/Error.jsp</location>
</error-page>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top