<c:set> 标签用于定义和存储变量,它可以定义变量是在 JSP 会话范围内还是 JavaBean 的属性中,可以使用该标签在页面中定义变量,而不用在 JSP 页面中嵌入打乱 HTML 排版的 Java 代码。<:set> 标签有 3 种语法格式。
在 scope 指定的范围内将标签主体存储到变量中。
将变量值存储在 target 属性指定的目标对象的 propName 属性中。
将标签主体存储到 target 属性指定的目标对象的 propName 属性中。
<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="城东书院"scope="page"/>
<c:set var="hostpage" value="www.cdsy.xyz" 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