掌握 EL+jstl 用法

一、EL表達式

1. 概念:

Expression Language 表達式語言

2. 作用:

替換和簡化jsp頁面中java代碼的編寫

3. 語法:

${表達式}

4. 注意:

jsp默認支持el表達式的。如果要忽略el表達式

  1. 設置jsp中page指令中:isELIgnored="true" 忽略當前jsp頁面中所有的el表達式
  2. \${表達式} :忽略當前這個el表達式

5. 使用:

1. 運算:

運算符:

  1. 算數運算符: + - * /(div) %(mod)
  2. 比較運算符: > < >= <= == !=
  3. 邏輯運算符: &&(and) ||(or) !(not)
  4. 空運算符: empty
    功能:用於判斷字符串、集合、數組對象是否爲null或者長度是否爲0
 ${empty list}:判斷字符串、集合、數組對象是否爲null或者長度爲0
 ${not empty str}:表示判斷字符串、集合、數組對象是否不爲null 並且 長度>0
2. 獲取值
  1. el表達式只能從域對象中獲取值
  2. 語法:
    ${域名稱.鍵名}:從指定域中獲取指定鍵的值

域名稱:

  1. pageScope --> pageContext 當前頁面
  2. requestScope --> request 一次請求
  3. sessionScope --> session 當前會話
  4. applicationScope --> application(ServletContext)全局,所有用戶共享
舉例:在request域中存儲了name=張三
獲取:${requestScope.name}
  1. ${鍵名}:
    表示依次從最小的域中查找是否有該鍵對應的值,直到找到爲止。

  2. 獲取對象、List集合、Map集合的值

    1. 對象:
      ${域名稱.鍵名.屬性名} 本質上會去調用對象的getter方法

    2. List集合:
      ${域名稱.鍵名[索引]}

    3. Map集合:
      1. ${域名稱.鍵名.key名稱}
      2. ${域名稱.鍵名[“key名稱”]}

  3. 隱式對象:
    el表達式中有11個隱式對象
    request,response,outpageContext, session,applicationpage,config,exception

pageContext:獲取jsp其他八個內置對象
例子:

 ${pageContext.request.contextPath}:動態獲取虛擬目錄

二、JSTL

1. 概念:

JavaServer Pages Tag Library JSP標準標籤庫 是由Apache組織提供的開源的免費的jsp標籤 <標籤>

2. 作用:

用於簡化和替換jsp頁面上的java代碼

3. jstl 使用步驟:

  1. 導入jstl相關jar包
    提取碼: shjm
    在這裏插入圖片描述
  2. 引入標籤庫:taglib指令: <%@ taglib %>
<%--引用標籤庫--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

4. 常用的JSTL標籤

1. if:相當於java代碼的if語句
  1. 屬性:test 必須屬性,接受boolean表達式如果表達式爲true,則顯示if標籤體內容,如果爲false,則不顯示標籤體內容一般情況下,test屬性值會結合el表達式一起使用
  2. 注意
    c:if標籤沒有else情況,想要else情況,則可以在定義一個c:if標籤

實例

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java"   isELIgnored="false" %>
<%--引用標籤庫--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>if標籤</title>
</head>
<body>
<c:if test="true">
    我是真的
</c:if>
<%--java--%>
<%
    List list=new ArrayList();
    list.add("aaaa");
    request.setAttribute("list",list);

    request.setAttribute("number",9);
%>
<%--jstl代碼塊--%>
<c:if test="${not empty list}">
遍歷循環。。。。。。。。。。。。。。。。
</c:if>

<c:if test="${number%2!=0}">
    ${number}爲基數
</c:if>
<%--c:if標籤沒有else情況,想要else情況,則可以在定義一個c:if標籤--%>
<c:if test="${number%2==0}">
    ${number}爲基數
</c:if>
</body>
</html>

2. choose:相當於java代碼的switch語句
1. 使用choose標籤聲明         			相當於switch聲明
2. 使用when標籤做判斷         			相當於case
3. 使用otherwise標籤做其他情況的聲明    	相當於default

實例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>choose標籤</title>
</head>
<body>
<%--choose:相當於java代碼的switch語句--%>
<%--1. 使用choose標籤聲明         			相當於switch聲明--%>
<%--2. 使用when標籤做判斷         			相當於case--%>
<%--3. 使用otherwise標籤做其他情況的聲明    	相當於default--%>
<%
    request.setAttribute("number",3);
%>

<c:choose>
    <c:when test="${number==1}">星期一</c:when>
    <c:when test="${number==2}">星期二</c:when>
    <c:when test="${number==3}">星期三</c:when>
    <c:when test="${number==4}">星期四</c:when>
    <c:when test="${number==5}">星期五</c:when>
    <c:when test="${number==6}">星期六</c:when>
    <c:when test="${number==7}">星期日</c:when>
    <c:otherwise>不符合規則</c:otherwise>
</c:choose>
</body>
</html>

3. foreach:相當於java代碼的for語句
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>foreach標籤</title>
</head>
<body>

<%--
for(int i=0 ;i<=6;i++){

}
var 臨時變量----> i
begin 開始 -----> int i=0
end 結束   -----> i<=6
step 步長  -----> i++
varStatus循環狀態對象
    index 容器中元素的索引,從0開始
    count 循環次數
--%>
<c:forEach begin="1" end="6" var="i" step="1">
    ${i}
</c:forEach>

<hr>
<%--
for(int i:list ){

}
items:容器對象  --->list
var 容器中元素的臨時變量----->i
varStatus循環狀態對象
    index 容器中元素的索引,從0開始
    count 循環次數,1開始
--%>
<%
    List list=new ArrayList();
    list.add("aaa");
    list.add("bbb");

    request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="str" varStatus="s">
    ${s.index} ${s.count} ${str}} <br>

</c:forEach>
</body>
</html>

三、 練習:

需求:在request域中有一個存有User對象的List集合。需要使用jstl+el將list集合數據展示到jsp頁面的表格table中

javaBean類

import java.text.SimpleDateFormat;
import java.util.Date;
public class User {
    private String name;
    private int age;
    private Date data;
    //格式化日期
    public String getBirStr(){
        if ( data!=null){
            SimpleDateFormat spm=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            return spm.format(data);
        }else {
            return "";
        }
    }
    //構造方法
    public User() {
    }
    public User(String name, int age,Date data) {
        this.name = name;
        this.age = age;
        this.data = data;
    }
	//get set 方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Date getData() {
        return data;
    }
    public void setData(Date data) {
        this.data = data;
    }
}

jsp代碼

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>

<%@ page import="java.util.Date" %>
<%@ page import="cn.itcast.javaBean.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    List list=new ArrayList();
    list.add(new User("張三",19,new Date()));
    list.add(new User("李四",20,new Date()));
    list.add(new User("王五",21,new Date()));
    list.add(new User("趙六",21,new Date()));


    request.setAttribute("list",list);
%>
        <table style="color: aquamarine" width="400px" border="1px" align="center">
            <tr>
                <th>編號</th>
                <th>名字</th>
                <th>年齡</th>
                <th>出生日期</th>

            </tr>

        <c:forEach items="${list}" var="i" varStatus="s">
            <c:if test="${s.count% 2== 0}">
                <tr style="background-color: lightpink">
                    <td>${s.count}</td>
                    <td>${i.name}</td>
                    <td>${i.age}</td>
                    <td>${i.BirStr}</td>
                </tr>
            </c:if>
            <c:if test="${s.count% 2!= 0}">
                <tr style="background-color: cornflowerblue">
                    <td>${s.count}</td>
                    <td>${i.name}</td>
                    <td>${i.age}</td>
                    <td>${i.birStr}</td>
                </tr>
            </c:if>

        </c:forEach>
        </table>
</body>
</html>

瀏覽器出現效果
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章