小编Spe*_*all的帖子

何时在JSP中设置请求范围的变量?

根据我的经验,很少/永远不需要设置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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

(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}"> …
Run Code Online (Sandbox Code Playgroud)

jsp scope jstl dynamic-scope lexical-scope

5
推荐指数
1
解决办法
3万
查看次数

标签 统计

dynamic-scope ×1

jsp ×1

jstl ×1

lexical-scope ×1

scope ×1