JSP JSTL <c:set>標籤:設定標籤

2020-07-16 10:04:55
<c:set> 標籤用於定義和儲存變數,它可以定義變數是在 JSP 對談範圍內還是 JavaBean 的屬性中,可以使用該標籤在頁面中定義變數,而不用在 JSP 頁面中嵌入打亂 HTML 排版的 Java 程式碼。<:set> 標籤有 3 種語法格式。

語法格式一:

<c:set var="name"[scope="page|request|session|application"]>
  標籤體
</c:set>

在 scope 指定的範圍內將標籤主體儲存到變數中。

語法格式二:

<c:set value="value" target="object" property="propName"/>

將變數值儲存在 target 屬性指定的目標物件的 propName 屬性中。

語法格式三:

<c:set target="object" property="propName">
  標籤體
</c:set>

將標籤主體儲存到 target 屬性指定的目標物件的 propName 屬性中。

<c:set> 標籤各屬性的詳細介紹如表所示。

<c:set>標籤屬性
屬性 型別 描述 參照 EL
value Object 將要儲存的變數值 可以
var String 儲存變數值的變數名稱 不可以
target Object 儲存變數值或者標籤主體的目標物件,可以是JavaBean或Map集合物件 可以
property String 指定目標物件儲存資料的屬性名 可以
scope String 指定變數存在於JSP的範圍,預設值是page 不可以

範例

本範例應用 <c:set> 標籤定義 page 和 session 兩個範圍內的變數,關鍵程式碼如下:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  //在page範圍內定義變數
  <c:set var="name" value="C語言中文網"scope="page"/>
  <c:set var="hostpage" value="c.biancheng.net" scope="session"/>

典型應用

通過 JSTL 的 <c:set> 標籤來實現“寫入”的功能,自定義兩個變數的作用域,分別定義為 application 和 session。

使用 <c:set> 標籤定義兩個變數 allCount 和 count,其中 allCount 作用域為 application,而 count 作用域為 session,頁面被瀏覽時累加兩個變數實現計數器的功能,關鍵程式碼如下:
<table align="center" cellpadding="0" cellspacing="0" bgcolor="lightblue">
  <c:set var="allCount" value="${allCount+1}" scope="application"></c:set>
  <c:set var="count" value="${count+1}" scope="session"></c:set>
  <Tr><td>
    今天存取本網站總人數為:${allCount}<br/>
    今天您存取了此網站次數為:${count}<br/>
    </td></Tr>
  <c:set var="test" value="by value property"></c:set>
  <c:set var="test">by body</c:set>
</table>
<br/>
<br/>
  <%
    request.setAttribute("user",new com.mr.bean.User());
    request.setAttribute("map",new java.util.HashMap());
  %>
  <c:set target="${user}" property="name" value="${param.name}"></c:set>
    ${user.name}
  <c:set target="${map}" property="name" value="${param.name}"/>
    ${map.name}
執行結果如下:
今天存取本網站總人數為:76
今天您存取了此網站次數為:102