Jstl
一、Jstl的使用
核心标签库:http://java.sun.com/jsp/jstl/core
格式化标签库:http://java.sun.com/jsp/jstl/fmt
1、引入标签库的jar包(每个项目拷贝一次)
jstl.jar和standard.jar
2、在jsp页面通过taglib指令导入指定的类库(每个jsp页面需要单独引用)
<%@taglib uri="要引入的标签库的路径" prefix="标签库的前缀" %>
前缀可以自定义,程序员习惯设置为指定的前缀名
core核心库:c
fmt格式化标签库:fmt
注:jstl标签操作的一般都是域对象
二、标签的使用
1、条件动作标签
1)if标签
格式:
无主体内容:<c:if test="条件" var="限域变量名" scope="域对象的范围 page|request|session|application"></c:if>
有主体内容:
<c:if test="条件" var="限域变量名" scope="域对象的范围 page|request|session|application">
主体内容
</c:if>
常用属性:
test:判断的条件,返回true或false,操作的是域对象的值;必须要设置的属性
var:限域变量名,存在域对象中的变量名,可以通过el表达式获取到该变量名对应的值
scope:限域变量名的域范围,四个范围 page|request|session|application
注:if标签没有对应else,所以如果需要做else判断,需要设置两个完全相反的if条件判断
[code] <% request.setAttribute("str", "a"); request.setAttribute("str2", "a"); %> <%-- <c:if test="${1==1 }" var="flag" scope="request"></c:if> ${flag } <br> <c:if test="${1 == '1' }" var="flag2" ></c:if>${flag2 } <br> <c:if test="${'1' == '1' }" var="flag3" ></c:if>${flag3 } <br> <c:if test="${'a' eq 'a' }" var="flag4" ></c:if>${flag4 } <br> <c:if test="${'1==1' }" var="flag5" ></c:if>${flag5 } <br> --%> <c:if test="${str == str2 }" var="flag6" ></c:if>${flag6 } <br> <br><br> <c:if test="${str == str2 }"> </c:if> <hr> <br> <% request.setAttribute("num", 80); %> <c:if test="${num > 60 && num < 80 }"> <div style="background-color: blue;"> <h2>哎哟不错哦!</h2> </div> </c:if> <c:if test="${num >= 80 }"> <div style="background-color: green;"> <h2>你很棒棒哦!</h2> </div> </c:if>
2)、choose、when和otherwise标签
格式:
<c:choose>
<c:when test="条件">
满足条件会执行的内容
</c:when>
<c:when test="条件">
满足条件会执行的内容
</c:when>
...
<c:otherwise>
当所有的when条件不成立时,才会执行的内容
</c:otherwise
</c:choose>
注意:
1、choose标签中只能包含when和otherwise标签,而when和otherwise标签中可以嵌套其他标签
报错:Illegal child tag in "c:choose" tag
2、choose和otherwise标签没有属性,而when标签必须设置test属性
3、choose标签中至少有一个when标签,可以没有otherwise标签
4、when标签必须设置在otherwise标签之前
5、otherwise标签只有在所有的when标签都不成立的条件下,才会执行
[code]<% request.setAttribute("num", 80); %> <c:choose> <c:when test="${num < 60 }"> <h3>不及格!</h3> </c:when> <c:when test="${num == 60 }"> <h3>运气不错!</h3> </c:when> <c:when test="${num > 60 && num < 80 }"> <h3>哎哟不错哦!</h3> </c:when> <c:otherwise> <h3>你很棒棒哦!</h3> </c:otherwise> </c:choose>
2、迭代标签
forEach
格式:
1、遍历内容多次,相当于java中 for(int i = 0; i < length; i++) {}
<c:forEach begin="开始数" end="结束数" var="限域变量名" step="间隔数">
${限域变量名}
</c:forEach>
2、迭代集合,相当于java中的 for(String str : strings) {}
<c:forEach items="要被迭代的数据(List、Map等)" var="限域变量名" varStatus="当前成员的相关信息">
${限域变量名}
</c:forEach>
[code] <% List list = new ArrayList(); for (int i = 0; i < 10; i++) { list.add("A:" + i); } request.setAttribute("mylist", list); List<User> userList = new ArrayList<>(); User user = new User(); user.setUserId(1); user.setUserName("zhangsan"); user.setUserPwd("123455"); User user2 = new User(); user2.setUserId(2); user2.setUserName("lisi"); user2.setUserPwd("123123"); User user3 = new User(); user3.setUserId(3); user3.setUserName("wangwu"); user3.setUserPwd("34667"); userList.add(user); userList.add(user2); userList.add(user3); request.setAttribute("userList", userList); for(User u : userList) { } Map<String,Object> map = new HashMap<String,Object>(); map.put("map1", "shsxt"); map.put("map2", "bjsxt"); map.put("map3", "sxt"); map.put("map4", 12); request.setAttribute("map", map); %> <h3>迭代集合</h3> <c:forEach items="${mylist }" var="item"> ${item } </c:forEach> <br> <c:forEach items="${userList }" var="item"> ${item } -- ${item.userId } -- ${item.userName } -- ${item.userPwd } <br> </c:forEach> <br> <table border="1" style="border-collapse: collapse;width:800px"> <tr> <th>用户ID</th> <th>用户姓名</th> <th>用户密码</th> <th>下标</th> <th>第几次被循环到</th> <th>是否属第一个被循环的</th> <th>是否属最后一个被循环的</th> </tr> <c:forEach items="${userList }" var="item" varStatus="itemp"> <tr> <td>${item.userId }</td> <td>${item.userName }</td> <td>${item.userPwd }</td> <td>${itemp.index }</td> <td>${itemp.count }</td> <td>${itemp.first }</td> <td>${itemp.last }</td> </tr> </c:forEach> </table> <hr> <h3>迭代Map</h3> <c:forEach items="${map }" var="item"> 键:${item.key } -- 值:${item.value } <br> </c:forEach> <hr> <h3>循环内容多次</h3> <table border="1" style="border-collapse: collapse;"> <c:forEach begin="1" end="9" var="i" step="1"> <tr> <c:forEach begin="1" end="${i }" var="j" step="1"> <td>${j } * ${i } = ${j*i }</td> </c:forEach> </tr> </c:forEach> </table>
3、格式化动作指令
1)、fomatNumber标签
格式:
无主体内容:
<fmt:formatNumber value="要被格式化的值" type="格式化的类型number|percent|currency" var="限域变量名" />
有主体内容:
<fmt:formatNumber type="格式化的类型number|percent|currency" var="限域变量名">
要被格式化的值
</fmt:formatNumber>
type属性的默认值是number
注:如果设置了var属性,格式化后的结果会被限域变量名所接收;若未设置var属性,则格式化的结果会直接显示。
[code] <% request.setAttribute("num", "100"); %> <fmt:formatNumber value="${num }" type="number" /> <br> <fmt:formatNumber value="${num }" type="number" var="val" /> ${val } <br> <fmt:formatNumber> ${num } </fmt:formatNumber> <br> <fmt:formatNumber var="val2"> ${num } </fmt:formatNumber> ${val2 } <br> <fmt:formatNumber type="currency"> ${num } </fmt:formatNumber><br> <fmt:formatNumber type="percent"> ${num } </fmt:formatNumber><br> <!-- 设置区域 --> <fmt:setLocale value="en-US"/> <fmt:formatNumber type="currency"> ${num } </fmt:formatNumber><br>
2)、fomatDate标签
<fmt:formatDate value="要格式化的日期型数据" type="日期类型|时间类型|日期+时间类型" dateStyle="日期的格式" timeStyle="时间的格式" pattern="具体的格式" var="限域变量名"/>
常用属性:
value:取值的是日期型
type:格式的类型
date日期格式 默认值
time时间格式
both日期+时间格式
dateStyle:日期格式的具体格式 Long、short、Full等
timeStyle:时间格式的具体格式Long、short、Full等
pattern:具体的格式化格式 y M d H m s
注:如果设置了var属性,格式化后的结果会被限域变量名所接收;若未设置var属性,则格式化的结果会直接显示。
[code]<% request.setAttribute("myDate", new Date()); %> ${myDate } <br> <fmt:formatDate value="${myDate }"/><br> <fmt:formatDate value="${myDate }" type="date" var="date1"/> ${date1 }<br> <fmt:formatDate value="${myDate }" type="time" /> <br> <fmt:formatDate value="${myDate }" type="both" /> <br> <fmt:formatDate value="${myDate }" type="both" dateStyle="Long" timeStyle="Long"/> <br> <fmt:formatDate value="${myDate }" pattern="yyyy-MM-dd HH:mm:ss"/> <br> <fmt:formatDate value="${myDate }" pattern="yyyy/MM/dd HH:mm:ss"/> <br> <fmt:formatDate value="${myDate }" pattern="dd/MM/yy HH:mm:ss"/> <br>
3)、parseNumber标签
利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环 境的数字。即解析一个代表着数字,货币或百分比的字符串。
<fmt:parseNumber type="需要被格式化的字符串的类型number|percent|currency">
要格式化的指定格式的字符串
</fmt:parseNumber>
[code] <% request.setAttribute("num", "10"); request.setAttribute("num2", "10%"); request.setAttribute("num3", "¥10.00"); %> <fmt:parseNumber type="number"> ${num } </fmt:parseNumber> <br> <fmt:parseNumber type="percent"> ${num2 } </fmt:parseNumber> <br> <fmt:parseNumber type="currency"> ${num3 } </fmt:parseNumber>
4)、parseDate标签
<fmt:parseDate type="date|time|both" pattern="日期字符串对应的格式"></fmt:parseDate>
[code] <% request.setAttribute("date1", "2018-05-05 12:45:54"); request.setAttribute("date2", "12:45:54"); request.setAttribute("date3", "03/12-2019"); %> <fmt:parseDate> ${date1 } </fmt:parseDate> <br> <fmt:parseDate type="time"> ${date2 } </fmt:parseDate> <br> <fmt:parseDate type="both"> ${date1 } </fmt:parseDate> <br> <br> <fmt:parseDate pattern="MM/dd-yyyy"> ${date3 } </fmt:parseDate> <br>
- JSTL使用心得
- 深入剖析为什么jstl不支持if else
- 用JSTL实现JSP应用程序快速开发
- The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
- JstL解析XML文件
- 本地使用JSTL标签的方式及问题解决
- JSTL 入门,第4部分: 访问SQL和XML内容
- 关于Struts2中的s标签和JSTL中的c标签的对比
- jstl--sql 语句小结
- Jstl标签<c:if>的用法
- JSTL(JSP标准标签库)介绍
- [置顶] JSTL的简单使用
- Web Tier to Go With Java EE 5: Summary of New Features in Java Standard Tag Library (JSTL) 1.2
- JSTL
- JSTL中得到context path
- 如何编写jstl自定义标签(示例:自定义jstl Long型时间转为date型)
- JSTL 入门:探讨 core
- JSTL 核心标签库
- 使用JSTL中遇到的EL报错问题
- 关于 JSTL c:out 对 XML html 自动转义 转义的禁用