scope="request"
私の経験では、EL 変数を設定する必要はほとんどありません。
たとえば、item
パラメーターを指定すると、そのアイテムのプロパティに基づいてそのアイテムに固有の URL を構築するページがあります。このページは、アイテムへのリンクをレンダリングする必要があるすべてのページに含まれています。
(A) リクエストスコープの変数を使用
itemLink.jsp
<%-- Accepts a parameter named 'item' --%>
<c:set var="urlTemplate" value="${param['item'].urlTemplate}" />
<c:choose>
<c:when test="${empty urlTemplate}">
<c:set var="itemUrl" scope="request" value="/missingProductUrl.jsp"/>
</c:when>
<c:otherwise>
<c:url var="itemUrl" scope="request" value="${urlTemplate}">
<c:param name="id" value="${param['item'].id}"/>
</c:url>
</c:otherwise>
</c:choose>
otherPage.jsp
<jsp:include page="itemLink.jsp">
<jsp:param name="item" value="${currentItem}"/>
</jsp:include>
<%-- 'itemUrl' has request scope --%>
<a href="${itemUrl}">Item Link</a>
(B) リクエストスコープ変数なし
itemLink.jsp
<%-- Accepts a parameter named 'item' --%>
<c:set var="urlTemplate" value="${param['item'].urlTemplate}" />
<c:choose>
<c:when test="${empty urlTemplate}">
<c:set var="itemUrl" value="/missingProductUrl.jsp"/>
</c:when>
<c:otherwise>
<c:url var="itemUrl" value="${urlTemplate}">
<c:param name="id" value="${param['item'].id}"/>
</c:url>
</c:otherwise>
</c:choose>
<c:out value="${itemUrl}"/>
otherPage.jsp
<c:set var="itemUrl">
<jsp:include page="itemLink.jsp">
<jsp:param name="item" value="${currentItem}"/>
</jsp:include>
</c:set>
<%-- 'itemUrl' has page scope --%>
<a href="${itemUrl}">Item Link</a>
(B)よりも(A)を使用する理由はありますか? 私の答えはノーです。理由は次のとおりです。
( A)の場合、同じリクエスト中に処理される他のページには が表示されることを覚えておく必要が
itemUrl
あるため、名前の衝突を避ける必要があります。また、同じリクエスト中に処理されるすべてのページを検索する以外に、リクエスト スコープの変数が設定されている場所を見つける方法がないため、EL 変数のソースのトレースがより困難になります。(B)では、変数にはページ スコープしかないため、これは問題になりません。
編集:
おそらく(B)よりも優れた解決策があります。
(C) 静的インクルードの使用
itemLink.jspf
<%-- Accepts a parameter named 'item' --%>
<c:set var="urlTemplate" value="${param['item'].urlTemplate}" />
<c:choose>
<c:when test="${empty urlTemplate}">
<c:set var="itemUrl" value="/missingProductUrl.jsp"/>
</c:when>
<c:otherwise>
<c:url var="itemUrl" value="${urlTemplate}">
<c:param name="id" value="${param['item'].id}"/>
</c:url>
</c:otherwise>
</c:choose>
otherPage.jsp
<c:set var="item" value="${currentItem}"/>
<%@ include page="itemLink.jsp" %>
<%-- 'itemUrl' has page scope --%>
<a href="${itemUrl}">Item Link</a>
(B)も(C)も、リクエストスコープの変数を使用する必要はありません。見逃したリクエストスコープを使用する理由はありますか?