后台学习四---el语言及jstl表达式
具体知识自行百度,我这里就讲我自己用的比较多的几种。
我们使用el语言及jstl表达式来进行后端渲染,在页面上动态生成数据
1. EL 操作符
算术型 :+、-(二元)、*、/、div、%、mod、-(一元)
逻辑型 :and、&& ; or、|| ; !、not
关系型 :==、eq;!=、ne;gt、>;lt ,<;le ,<= ; >=、ge。 可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文 字进行比较。
空 :empty。空操作符是前缀操作,可用于确定值是否为空。空字符串,null都可以用empty表示
条件型 :A ?B :C。根据 A 赋值的结果来赋值 B 或 C。
2. 简单显示
比如说我们从后台传过来这样一个叫user的model,然后他有id,name等属性, 我们怎么在页面上显示他的id呢?
两种写法,${user.id}
或者${user["id"]}
如果后台传过来的是user的集合,怎么输出第一个的id呢?
两种写法,${list[0].id}
或者${list[0]["id"]
3. 判断
有时候我们需要进行判断来输出不同的内容,比如说,user有个sex属性,它在数据库里存的值是0和1,用0表示男,1表示女,那怎么显示呢?
- 1
3.1 c:if
标签
语法格式是<c:if test="条件" var="name">
test属性用于存放判断的条件,一般使用EL表达式来编写。
<c:if test="${user.sex eq 0}" >
男
</c:if>
<c:if test="${user.sex eq 1}" >
女
</c:if>
- 1
- 2
- 3
- 4
- 5
- 6
如果user的sex是0,那么就会在页面上显示男
如果user的sex是1,那么就会在页面上显示女
3.2 c:choose
和c:when
标签
语法跟<c:if>
相近,就是多了个 <c:otherwise>
用来对应其他情况,就相当于if else
的else
test属性用于存放判断的条件,一般使用EL表达式来编写。
<c:choose>
<c:when test="${one.sex eq 0}">
男
</c:when>
<c:when test="${one.sex eq 1}">
女
</c:when>
<c:otherwise>
不知道性别
</c:otherwise>
</c:choose>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
如果user的sex是0,那么就会在页面上显示男
如果user的sex是1,那么就会在页面上显示女
其他情况会显示不知道性别
3.3 el语言-问号表达式
语法格式是${A?B:C}
,如果A为true则显示B的内容,如果A表达式结果为false,则显示C的内容
${user.sex eq 0 ?'男':'女'}
- 1
如果user的sex是0,那么就会在页面上显示男
如果user的sex是1,那么就会在页面上显示女
4. 循环
<c:forEach var="name" items="Collection" varStatus="StatusName" begin="begin" end="end" step="step">
【循环标签属性说明】:
名称 是否必须 默认值 解释
var 是 无 循环里使用的变量名
items 是 无 后台传过来的集合/数组名
begin 否 0 循环开始的index
end 否 集合中最后一个元素 循环结束的index
step 否 1 步长,循环每次增加的个数
varStatus 否 无 状态信息
【其中varStatus有4个状态属性】
属性名 类型 说明
index int 当前循环的索引值
count int 循环的次数
frist boolean 是否为第一个位置
last boolean 是否为第二个位置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
举个例子,后台传过来users
这个 model
,他是user的集合,那么怎么在页面上显示呢?
<table>
<tr>
<td>序号</td>
<td>id</td>
<td>name</td>
</tr>
<c:forEach items="${users}" var="one" varStatus="num" >
<tr>
<td>${num.count}</td>
<td> ${one.id}</td>
<td>${one.name}</td>
</tr>
</c:forEach>
</table>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
5. 时间格式化
<fmt:formatDate>
标签:该标签主要用来格式化日期和时间。
使用这个标签,要在jsp的开头加上
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
- 1
如下是它的格式:
<fmt:formatDate value="value" type="type" pattern="pattern" dateStyle="dateStyle"/>
- 1
先记住(眼熟)如下pattern
格式(反正我没记住。。有特殊需求的时候,我都是百度看看的):
d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。
ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
dddd 周中某天的完整名称,在 DayNames 中定义。
M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。
MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。
MMMM 月份的完整名称,在 MonthNames 中定义。
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
yyyy 包括纪元的四位数的年份。
gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h 12 小时制的小时。一位数的小时数没有前导零。从1到12,分上下午 范围:01:00 AM~12:59AM
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。从0到23,范围:00:00 AM~23:59AM
HH 24 小时制的小时。一位数的小时数有前导零。
m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。
s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有一个前导零。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
这些是type
:
{type:both}
<fmt:formatDate value="<%=new Date() %>" type="both"/>
<!-- 2011-3-30 9:41:21 -->
{type:date}
<fmt:formatDate value="<%=new Date() %>" type="date"/>
<!-- 2011-3-30 -->
{type:time}
<fmt:formatDate value="<%=new Date() %>" type="time"/>
<!-- 9:44:44 -->
{type:date, dateStyle:default}
<fmt:formatDate value="<%=new Date() %>" type="date" dateStyle="default"/>
<!-- 2011-3-30 -->
{type:date, dateStyle:short}
<fmt:formatDate value="<%=new Date() %>" type="date" dateStyle="short"/>
<!-- 11-3-30 -->
{type:date, dateStyle:medium}
<fmt:formatDate value="<%=new Date() %>" type="date" dateStyle="medium"/>
<!-- 2011-3-30 -->
{type:date, dateStyle:long}
<fmt:formatDate value="<%=new Date() %>" type="date" dateStyle="long"/>
<!-- 2011年3月30日 -->
{type:date, dateStyle:full}
<fmt:formatDate value="<%=new Date() %>" type="date" dateStyle="full"/>
<!-- 2011年3月30日 星期三 -->
{type:time, timeStyle:default}
<fmt:formatDate value="<%=new Date() %>" type="time" timeStyle="default"/>
<!-- 10:01:32 -->
{type:time, timeStyle:short}
<fmt:formatDate value="<%=new Date() %>" type="time" timeStyle="short"/>
<!-- 上午10:01 -->
{type:time, timeStyle:medium}
<fmt:formatDate value="<%=new Date() %>" type="time" timeStyle="medium"/>
<!-- 10:01:32 -->
{type:time, timeStyle:long}
<fmt:formatDate value="<%=new Date() %>" type="time" timeStyle="long"/>
<!-- 上午10时01分32秒 -->
{type:time, timeStyle:full}
<fmt:formatDate value="<%=new Date() %>" type="time" timeStyle="full"/>
<!-- 上午10时01分32秒 CST -->
{type:both, pattern:EEEE, MMMM d, yyyy HH:mm:ss Z}
<fmt:formatDate value="<%=new Date() %>" type="both" pattern="EEEE, MMMM d, yyyy HH:mm:ss Z"/>
<!-- 星期三, 三月 30, 2011 10:01:32 +0800 -->
{type:both, pattern:d MMM yy, h:m:s a zzzz}
<fmt:formatDate value="<%=new Date() %>" type="both" pattern="d MMM yy, h:m:s a zzzz"/>
<!-- 30 三月 11, 10:1:32 上午 中国标准时间 -->
{pattern:dd/MM/yyyy HH:mm aa}}
<fmt:formatDate value="<%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2011-3-30 13:12:12") %>" pattern="dd/MM/yyyy HH:mm aa"/>
<!-- 30/03/2011 13:12 下午 -->
{pattern:dd/MM/yyyy hh:mm aa}
<fmt:formatDate value="<%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2011-3-30 13:12:12") %>" pattern="dd/MM/yyyy hh:mm aa"/>
<!-- 30/03/2011 01:12 下午 -->
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
显示结果:
{type:both} 2011-3-30 10:07:42
{type:date} 2011-3-30
{type:time} 10:07:42
{type:date, dateStyle:default} 2011-3-30
{type:date, dateStyle:short} 11-3-30
{type:date, dateStyle:medium} 2011-3-30
{type:date, dateStyle:long} 2011年3月30日
{type:date, dateStyle:full} 2011年3月30日 星期三
{type:time, timeStyle:default} 10:07:42
{type:time, timeStyle:short} 上午10:07
{type:time, timeStyle:medium} 10:07:42
{type:time, timeStyle:long} 上午10时07分42秒
{type:time, timeStyle:full} 上午10时07分42秒 CST
{type:both, pattern:EEEE, MMMM d, yyyy HH:mm:ss Z} 星期三, 三月 30, 2011 10:07:42 +0800
{type:both, pattern:d MMM yy, h:m:s a zzzz} 30 三月 11, 10:7:42 上午 中国标准时间
{pattern:dd/MM/yyyy HH:mm aa} 30/03/2011 13:12 下午
{pattern:dd/MM/yyyy hh:mm aa} 30/03/2011 01:12 下午
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
真是一长串。。反正我用的时候习惯这样子,好记又好用
<fmt:formatDate value='${one.createtime}' type="both"/>
2017-3-29 11:12:27
- 1
- 2
- 3
好了,jstl还有很多标签,我就不一一列举了,以上的,是我自己比较常用的标签
接着,我就写一个查询全部的例子:
sql xml:
<select id="selectAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from user
</select>
- 1
- 2
- 3
- 4
- 5
Controller:
//获得所有user
@RequestMapping(value = "/lxf/test3/getAll", method = RequestMethod.GET)
public String getAll( Model model) {
model.addAttribute("list",userService.selectAll());
return "lxf/userList";
}
- 1
- 2
- 3
- 4
- 5
- 6
jsp显示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%--
Created by IntelliJ IDEA.
User: 11655
Date: 2017/4/11
Time: 15:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<style>
.table-b td {
border: 1px solid black
}
</style>
<body>
<table class="table-b">
<tr>
<td>序号</td>
<td>ID</td>
<td>姓名</td>
<td>性别</td>
<td>生成时间</td>
</tr>
<c:choose>
<c:when test="${empty list}">
没有数据!
</c:when>
<c:otherwise>
<c:forEach items="${list}" var="one" varStatus="num" >
<tr>
<td>${num.count}</td>
<td>${one.id}</td>
<td>${one.name}</td>
<td>
${one.sex eq 0 ?'男':'女'}
<%--<c:if test="${one.sex eq 0}" >--%>
<%--男--%>
<%--</c:if>--%>
<%--<c:if test="${one.sex eq 1}">--%>
<%--女--%>
<%--</c:if>--%>
<%--<c:choose>--%>
<%--<c:when test="${one.sex eq 0}">--%>
<%--男--%>
<%--</c:when>--%>
<%--<c:when test="${one.sex eq 1}">--%>
<%--女--%>
<%--</c:when>--%>
<%--<c:otherwise>--%>
<%--不知道性别--%>
<%--</c:otherwise>--%>
<%--</c:choose>--%>
</td>
<td><fmt:formatDate value='${one.createtime}' type="both"/></td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
that’s all,如果我有哪里说得不好或者有问题的地方,欢迎指出来,大家共同进步~
欢迎加入–qq群–JAVA后台学习交流群:486055993