您的位置:首页 > Web前端 > JavaScript

Jstl

2019-06-13 23:29 1341 查看

一、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>

 

 

 

 

 

 

 

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: