JSTL标签

来源:互联网 发布:阿里云 腾讯云 aws 编辑:程序博客网 时间:2024/05/17 17:15

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>
效果:





0 0
原创粉丝点击