Java - 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表示女,那怎么显示呢?

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>

如果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>

如果user的sex是0,那么就会在页面上显示男 
如果user的sex是1,那么就会在页面上显示女 
其他情况会显示不知道性别

3.3 el语言-问号表达式

语法格式是${A?B:C} ,如果A为true则显示B的内容,如果A表达式结果为false,则显示C的内容

 ${user.sex eq 0 ?'男':'女'}

 

如果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   是否为第二个位置

举个例子,后台传过来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>

这里写图片描述

5. 时间格式化

<fmt:formatDate>标签:该标签主要用来格式化日期和时间。 
使用这个标签,要在jsp的开头加上

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

 

如下是它的格式:

<fmt:formatDate value="value" type="type" pattern="pattern" dateStyle="dateStyle"/>

 

先记住(眼熟)如下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   秒。一位数的秒数有一个前导零。

这些是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 下午 -->  

显示结果:

{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 下午

真是一长串。。反正我用的时候习惯这样子,好记又好用

<fmt:formatDate value='${one.createtime}' type="both"/>

2017-3-29 11:12:27

好了,jstl还有很多标签,我就不一一列举了,以上的,是我自己比较常用的标签 
接着,我就写一个查询全部的例子:

sql xml:

   <select id="selectAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from user
    </select>

Controller:

 //获得所有user
 @RequestMapping(value = "/lxf/test3/getAll", method = RequestMethod.GET)
    public String getAll( Model model) {
        model.addAttribute("list",userService.selectAll());
        return "lxf/userList";
    }

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>

这里写图片描述

展开阅读全文

没有更多推荐了,返回首页