Chr*_*ers 11 java jsp jsp-tags forward
我可以在<%...%>块中使用与<jsp:forward page ="..."/>等效的纯Java吗?
例如,我目前有一个这样的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);
}
%>
Run Code Online (Sandbox Code Playgroud)
必须打破<%...%>块以使用jsp:forward是丑陋的,并且由于缩进等原因使得更难阅读.
那么,我可以在不使用JSP标记的情况下在Java代码中进行转发吗?
这样的事情是理想的:
<%
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);
}
%>
Run Code Online (Sandbox Code Playgroud)
小智 29
将someObject你要找的是pageContext的.
此对象在JSP中隐式定义,因此您可以像这样使用它:
pageContext.forward("<some relative jsp>");
Run Code Online (Sandbox Code Playgroud)
如果可以的话,你真的应该尽量避免使用scriplets,在你的情况下,很多你正在做的事情可以用JSTL代码替换.以下替换为您的示例更清晰,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>
Run Code Online (Sandbox Code Playgroud)
理想情况下,您需要修改error.jsp,以便甚至不需要在会话中设置错误消息,但我不想过多地更改您的设计.
| 归档时间: |
|
| 查看次数: |
57302 次 |
| 最近记录: |