现在的位置: 首页 > 综合 > 正文

JSTL标签

2018年06月05日 ⁄ 综合 ⁄ 共 3872字 ⁄ 字号 评论关闭

JSTL核心标签库共有13个,功能上分为4类:

1.表达式控制标签:out、set、remove、catch。

2.流程控制标签:if、choose、when、otherwise。

3.循环标签:forEach、forTokens。

4.URL操作标签:import、url、redirect

使用标签时,一定要在JSP文件头加入一下代码:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

下面分别对这些标签进行说明:

1.<c:out>用来显示数据对象(字符串、表达式)的内容或结果。

如果不使用该标签而使用java脚本的方式则为:<%out.println("hello")%> <%=表达式类型%>

使用JSTL标签:<c:out value="字符串">

测试代码:

 <body>
  <!-- 注:escapeXml表示原封不动输出代码 -->
   <c:out value="< 要显示的数据对象(未使用转义字符)>" escapeXml="true" /><br>
   <c:out value="< 要显示的数据对象(使用转义字符)>" escapeXml="false" />
  </body>

注:当escapeXml为true的时候,代码会原封不动的输出。

效果:

2.<c:set>用于定义相关变量,如:

<c:set var="ctx" value="${pageContext.request.contextPath}" />

上述代码是设置上下文路径,有了这个之后我们可以在访问一些资源(如:Action、图片等)的时候指明它们的绝对路径,比如:

<form action="${ctx}/userAction_add.action"></form>

3.<c:remove>主要用来从指定的JSP范围内删除指定的变量,语法:

<c:remove var="变量名" [scope="page|request|session|application"]></c:remove>

测试代码:

<body>
	<%
		request.setAttribute("age", "22");
	%>
	
	<!-- 變量名不用$符號,如果沒有指定域的話,就會刪除所有域的變量 -->
	<c:remove var="age" scope="request" />

	${age}
</body>

上述代码${age}是取不到值的,因为已经被删除了。

4.<c:catch>捕获异常,并存储异常信息,

<c:catch var="name1">

产生异常的代码

</c:catch>

如果抛出异常,则异常信息保存在变量name1中。

测试代码:

<body>

	<c:catch var="myException">

		<%
			int i = 8 / 0;
		%>
	</c:catch>
	<c:out value="${myException }" />
</body>

效果:

5.<c:if>用于判断,语法:

<c:if test="条件1" var="name" [scope="page|request|session|application"]></c:if>

测试代码:

<body>
	<%
		request.setAttribute("name", "hello");
		request.setAttribute("age", "22");
	%>

	<c:if test="${name=='hello'}">
  		 你好啊!
   </c:if>

	<c:if test="${name != 'hello' }">
   	不好啊!
   </c:if>

	<c:if test="${age == 22 }">
   	我22歲!
   </c:if>

	<c:if test="${age > 22 }">
   	我已經老了!
   </c:if>
</body>

注:比较字符串时,一定要用单引号,且<c:if>标签没有else,只能用if。比较数字时会自动转换。

6.<c:choose><c:when><c:otherwise>这三个标签嵌套使用,第一个标签在最外层,最后一个标签在嵌套中只能使用一次

测试代码:

<body>
	<c:set var="score">85</c:set>

	<c:choose>
		<c:when test="${score>=90}">
 		你的成績為優秀!
 	</c:when>

		<c:when test="${score>=70 && score<90}">
 		你的成績為良好!
 	</c:when>

		<c:when test="${score>60 && score<70}">
 		你的成績為及格!
 	</c:when>

	<c:otherwise>
 		對不起,您沒有通過考試!
 	</c:otherwise>
 	
	</c:choose>
</body>

注:<c:otherwise>在嵌套中只能使用一次,就像if...else if...else中的else只使用一次!

7.<c:forEach>,循环标签,语法:

<c:forEach var="name" items="collection" varStatus="statusName" begin="begin" end="end" step="step"></c:forEach>

该标签根据循环条件遍历集合Collection中的元素,var 用于存储从集合中取出的元素,items指定要遍历的集合(items的值用用$符号),varStatus用于存放集合中元素的信息,一共有4种状态。

测试代码:

<body>
	<%
		/*定義一個集合存放用戶*/
		List<User> users = new ArrayList<User>();
		/*創建用戶*/
		User user1 = new User();
		user1.setUid(1);
		user1.setUname("lavimer");
		
		User user2 = new User();
		user2.setUid(2);
		user2.setUname("mr_liao");
		
		/*把用戶添加到集合中*/
		users.add(user1);
		users.add(user2);

		/*把集合設置到request中*/
		request.setAttribute("userList", users);
	%>

	<!-- 注:items屬性也要用$符號,千萬不要忘記 -->
	<c:forEach items="${userList}" var="user" varStatus="s">
		<c:out value="${user.uname}"/></br>
		所在的位置,及索引:<c:out value="${s.index}"/></br>
		總共已迭代的次數:<c:out value="${s.count}"/></br>
		是否為第一個位置:<c:out value="${s.first}"/></br>
		是否為最後一個位置:<c:out value="${s.last}"/></br>
	</c:forEach>
</body>

注:varStatus中index为索引(从0开始),count为当前迭代的次数,first表示是否为第一个位置,last表示是否为最后一个位置。

效果:

测试代码:

<c:forEach var="i" begin="1" end="10" step="2">
		${i}
	</c:forEach>

效果:

注:varStatus中的count属性,我们可以用来判断奇偶行,从而做一些特效,如:

<table border="1">
		<c:forEach var="i" begin="1" end="10" step="1" varStatus="s">

			<c:if test="${s.count%2 == 0 }">
				<tr style="background-color:red">
					<td>${s.index}</td>
					<td>${i}</td>
				</tr>
			</c:if>

			<c:if test="${s.count%2 != 0}">
				<tr style="background-color:blue">
					<td>${s.index}</td>
					<td>${i}</td>
				</tr>
			</c:if>
	</c:forEach>
	</table>

效果:

8.<c:forTokens>用于浏览字串,并根据指定的字符串截取字符串,语法:

<c:forTokens items="StringOfTokens" delims="delimiters" [var="name" begin="begin" end="end" step="len" varStatus="statusName"]></c:forTokens>

测试代码:

<body>

	<%
		request.setAttribute("abc", "北,京,歡,迎,您");
	%>
	
	<c:forTokens items="${abc}" delims="," var="c1">
   		${c1}
   </c:forTokens>
  
</body>

效果:


测试代码:

<body>
   <c:forTokens items="1*2*3*4*5" delims="*" begin="1" end="3" var="temp" varStatus="s">
   		${temp}的四種屬性:</br>
   		所在的位置,及索引:<c:out value="${s.index}"/></br>
		總共已迭代的次數:<c:out value="${s.count}"/></br>
		是否為第一個位置:<c:out value="${s.first}"/></br>
		是否為最後一個位置:<c:out value="${s.last}"/></br><br>
   </c:forTokens>
</body>

效果:



【上篇】
【下篇】

抱歉!评论已关闭.