JSP核心之JSTL

JSP核心之JSTL

一、核心標簽庫

使用 JSTL 的核心標簽庫单芜,需要在頁面中通過 taglib 指令首先將標簽庫導入洲鸠。

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

(1)c:set

用于進行變量定義馋缅,并將變量存放到指定域屬性空間萤悴;為 Bean 的屬性賦值;設置 Map的 key 與 value 等居灯。該標簽在實際開發(fā)中并不常用内狗。

<1>將變量放到request域屬性空間:

<c:set value="張三" var="name" scope="request"/>
name = ${requestScope.name}<br>

屬性表示的含義:

  • value:變量的值
  • var:變量名
  • scope:將變量存放的域屬性空間柳沙,取值為page拌倍、request、session数初、application泡孩。默認為page范圍

<2>為Bean的屬性賦值

<jsp:useBean id="student" class="com.hcx.beans.Student" scope="session"/>
<c:set value="李四" property="name" target="${sessionScope.student}"/>
<c:set value="24" property="age" target="${sessionScope.student}"/>

屬性表示的含義:

  • target:指定的Bean對象
  • property:指定對象的指定屬性
  • value:為指定對象的指定屬性所賦的值

<3>為Map的key與value賦值

<%
    Map<String,String> map = new HashMap();
    pageContext.setAttribute("map",map);
%>
<c:set value="男" property="gender" target="${map}"/>
<c:set value="12345678974" property="mobile" target="${map}"/>

屬性表示的含義:

  • target:指定的 map
  • property:指定 map 的指定的 key
  • value:為指定 map 的指定的 key 所賦的值

(2)c:remove

從域屬性空間中刪除指定變量仑鸥。該標簽不常用变屁。

<1>刪除指定域空間中的指定變量

<c:set var="some" value="pag_some" scope="page"/>
<c:set var="some" value="req_some" scope="request"/>
<c:set var="some" value="ses_some" scope="session"/>
<c:set var="some" value="app_some" scope="application"/>

<c:remove var="some" scope="request"/>

some pag = ${pageScope.some}<br>
some req = ${requestScope.some}<br>
some ses = ${sessionScope.some}<br>
some app = ${applicationScope.some}<br>

屬性表示的含義:

  • var:指定要刪除的變量名
  • scope:指定要刪除哪個域屬性空間中的指定變量粟关。不指定該屬性,則刪除所有域屬性空間中的該變量澎灸。

<2>刪除所有域空間中的指定變量

<c:remove var="some" />
some pag = ${pageScope.some}<br>
some req = ${requestScope.some}<br>
some ses = ${sessionScope.some}<br>
some app = ${applicationScope.some}<br>

(3)c:out

用于在頁面上輸出 EL 表達式的值击孩。該標簽不常用。
EL 表達式不用<c:out/>標簽创泄,就可以直接在頁面上輸出括蝠,那么使用這個<c:out/>標簽有什么更強的作用呢忌警?

<1>escapeXml="false" 解析HTML標簽

<c:set var="city" value="<h2>北京</h2>"/>

city1 = <c:out value="${city}" /><br>
city2 = <c:out value="${city}" escapeXml="flase"/><br>
city3 = ${city}<br>

屬性表示的含義:

  • value:指定要輸出的 EL 表達式
  • escapeXml:是否忽略 HTML 標簽。若為 true箕速,則不解析 HTML 標簽朋譬,將按原樣輸出徙赢,為默認值。若為 false窑业,則解析 HTML 標簽枕屉。EL 表達式本身也是解析 HTML 標簽的搀擂,無法忽略,不能將 HTML 標簽按照原樣輸出秸架。

<2>default="默認值"

country1 = <c:out value="${country}" default="中國" /><br>
country2 = ${country}<br>

屬性表示的含義:

  • default:指定默認值东抹。若要輸出的變量不存在,或其值為 Null食茎,則輸出默認值馏谨。而對于EL 表達式惧互,對于不存在或值為 Null 的變量,其不進行輸出拨与。

(4)c:catch

當有異常發(fā)生時买喧,用于捕獲異常匆赃。相當于 try-catch 中的 catch 代碼塊。該標簽不常用钱床。該標簽只有一個屬性 var,是捕獲到的異常對象事期。

<c:catch var="ex">
    <!--Student類中沒有score屬性-->
    double score = ${student.score};
</c:catch>
<br>
ex = ${ex.message}<br>

(5)c:if

用于實現(xiàn)對于條件的判斷兽泣。

<c:set var="user" value="admin" />
<c:if test="${user == 'admin'}">
    <a href="">進入管理頁面</a>
</c:if>
<br>
系統(tǒng)首頁

屬性表示的含義:

  • test:判斷的條件唠倦。若為 true,則執(zhí)行標簽體冈止,否則不執(zhí)行候齿。
  • var:存儲 test 的判斷結果。不常用掂器。
  • scope:存儲 test 判斷結果的變量的存放范圍俱箱。不常用狞谱。

(6)c:choose

實現(xiàn)多分支判斷。類似于 switch-case 語句峡懈。一個<c:choose/>標簽中可以包含多個<c:when/>與一個<c:otherwise/>与斤。

下面的例子實現(xiàn)對于頁面上“首頁”“上一頁”“下一頁”“末頁”導航按鈕的顯示功能:

  • 總共一頁的情況:四外按鈕都是普通文本撩穿,沒有超鏈接。
  • 當前頁是第一頁的情況:首頁雾狈、上一頁是普通文本善榛;下一頁呻畸、末頁是超鏈接伤为。
  • 當前頁是最后一頁的情況:首頁、上一頁是超鏈接叙甸;下一頁位衩、末頁是普通文本。
  • 其它情況光戈,即當前頁為中間頁的情況:四個按鈕均是超鏈接。
6.jpg

(7)c:forEach

用于循環(huán)遍歷數(shù)組晌杰、List肋演、Set烂琴、Map 集合奸绷。在實際應用中使用非常頻繁。

<1>常規(guī)用法

a.遍歷Object[]

<%
    Object[] citys = {"北京","上海","廣州"};
    pageContext.setAttribute("citys",citys);
%>
<c:forEach items="${citys}" var="city">
    ${city}<br>
</c:forEach>

b.遍歷List

<%
    List<String> names = new ArrayList();
    names.add("張三");
    names.add("李四");
    names.add("王五");

    pageContext.setAttribute("names",names);
%>
<c:forEach items="${names}" var="name">
    ${name}<br>
</c:forEach>

c.遍歷Set

<%
    Set<String> schools = new HashSet();
    schools.add("清華大學");
    schools.add("北京大學");
    schools.add("中國人民大學");

    pageContext.setAttribute("schools",schools);
%>
<c:forEach items="${schools}" var="school">
    ${school}<br>
</c:forEach>

d.遍歷Map

<%
    Map<String,Object> map = new HashMap();
    map.put("name","張三");
    map.put("age","23");
    map.put("score",93.5);

    pageContext.setAttribute("map",map);
%>
<c:forEach items="${map}" var="entry">
    ${entry.key} = ${entry.value}<br>
</c:forEach>

<2>指定遍歷的起始索引及步長

對于數(shù)組及 List,可以指定遍歷的起始索引及步長铅碍。

a.指定遍歷起始

<% 
    Object[] countrys={"0中國","1美國","2德國","3英國","4法國","5日本","6韓國"};
    pageContext.setAttribute("countrys",countrys);
%>
<c:forEach items="${countrys}" var="country" begin="1" end="5">
    ${country}<br>
</c:forEach>

運行結果:

1美國
2德國
3英國
4法國
5日本

b.指定遍歷起始及步長

<% 
    Object[] countrys={"0中國","1美國","2德國","3英國","4法國","5日本","6韓國"};
    pageContext.setAttribute("countrys",countrys);
%>
<c:forEach items="${countrys}" var="country" begin="1" end="5" step="2">
    ${country}<br>
</c:forEach>

運行結果:

1美國
3英國
5日本

屬性表示的含義:

  • begin:指定遍歷開始索引胞谈。從 0 開始計數(shù)憨愉。
  • end:指定遍歷結束索引配紫,遍歷結果包含這個索引。
  • step:指定遍歷時的步長

<3>獲取當前遍歷對象的相關信息

<forEach/>標簽中有一個屬性 varStatus,該屬性指定的變量是一個引用型變量括细。該引用中記錄了當前遍歷對象的相關信息奋单。該引用常用的方法如下:

  • int getIndex():獲取當前對象的索引猫十。從 0 開始計數(shù)。
  • int getCount():獲取當前對象的序號贷笛。從 1 開始計數(shù)乏苦。
  • boolean isFirst():判斷當前對象是否是第一個對象汇荐。
  • boolean isLast():判斷當前對象是否是最后一個對象。

a.添加序號

<br>--------獲取當前遍歷對象的相關信息---------<br>
<%
    List<Student> students = new ArrayList();
    students.add(new Student("張三",23));
    students.add(new Student("李四",24));
    students.add(new Student("王五",25));
    students.add(new Student("趙六",26));
    students.add(new Student("田七",27));
    students.add(new Student("劉八",28));

    pageContext.setAttribute("students",students);
%>

<table border="1">
    <tr>
        <th>序號</th>
        <th>姓名</th>
        <th>年齡</th>
    </tr>
    <c:forEach items="${students}" var="student" varStatus="curObj"
        <tr>
            <td>${curObj.count}</td>
            <td>${student.name}</td>
            <td>${student.age}</td>
        </tr>
    </c:forEach>
</table>

b.隔行變色

在前面頁面中添加一段 CSS 代碼:使用類選擇器旬蟋,名稱為 odd 的類使用一種背景顏色倾贰;名稱為 even 的類使用另一種背景顏色稠腊。

<head>
    <title>My JSP 'index.jsp' starting page</title> 
    <style type="text/css">
        <!--類選擇器:奇數(shù)-->
        .odd{
            background-color:#eeeeee
        }
        <!--類選擇器:偶數(shù)-->
        .even{
            background-color:#888888
        }
    </style>
</head>

再修改<forEach/>中的<tr>架忌,為每一行添加一個類名:奇數(shù)行添加 odd 類名叹放,偶數(shù)行添加 even 類名。

<table border="1">
    <tr>
        <th>序號</th>
        <th>姓名</th>
        <th>年齡</th>
    </tr>
    <c:forEach items="${students}" var="student" varStatus="curObj"
        <tr class="${curObj.index%2==0?'even':'odd'}">
            <td>${curObj.count}</td>
            <td>${student.name}</td>
            <td>${student.age}</td>
        </tr>
    </c:forEach>
</table>

運行結果:

7.jpg

二、格式化標簽庫

(1)fmt:formatDate

該標簽用于使用不同的模式格式化日期雹嗦。其常用屬性有:

  • value:將要被格式化的數(shù)據(jù)
  • pattern:格式化的模式合是。其與 SimpleDateFormat 的參數(shù)設置方式相同聪全。
  • var:格式化后的字符串所要存放的變量。若不指定 var娃圆,則會將格式化過的結果直接顯示在頁面
  • scope:變量存放的域屬性空間讼呢,取值為 page、request三痰、session散劫、application幕帆。默認為page 范圍
  • type:其取值為 date失乾、time,或 both裸卫,表示給出的 value 是日期墓贿、時間蜓氨,還是兩者都包含穴吹。默認為 date
8.jpg

(2)fmt:parseDate

該標簽用于將指定字符串轉換為日期類型港令。常用的屬性有:

  • value:將要被轉換的數(shù)據(jù)
  • pattern:將要被轉換的數(shù)據(jù)的模式。其與 SimpleDateFormat 的參數(shù)設置方式相同咪惠。
  • var:轉換后的日期類型數(shù)據(jù)所要存放的變量硝逢。若不指定 var绅喉,則會將轉換過的結果直接顯示在頁面
  • scope:變量存放的域屬性空間柴罐,取值為 page革屠、request、session那婉、application详炬。默認為page 范圍
9.jpg

(3)fmt:formatNumber

該標簽用于按照指定格式對數(shù)字進行格式化呛谜。常用的屬性有:

10.jpg
11.jpg

若要使用 pattern 模式隐岛,則其中常用的符號的意義為:

12.jpg

(4)fmt:parseNumber

該標簽用于將指定字符串轉換為數(shù)值類型聚凹。常用的屬性有:

13.jpg
14.jpg
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市童谒,隨后出現(xiàn)的幾起案子饥伊,更是在濱河造成了極大的恐慌琅豆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚪拦,死亡現(xiàn)場離奇詭異驰贷,居然都是意外死亡盛嘿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門括袒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來次兆,“玉大人,你說我怎么就攤上這事锹锰〗嫣浚” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵恃慧,是天一觀的道長园蝠。 經(jīng)常有香客問我痢士,道長砰琢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任良瞧,我火速辦了婚禮陪汽,結果婚禮上,老公的妹妹穿的比我還像新娘褥蚯。我一直安慰自己挚冤,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布赞庶。 她就那樣靜靜地躺著训挡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歧强。 梳的紋絲不亂的頭發(fā)上澜薄,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音摊册,去河邊找鬼肤京。 笑死壁袄,一個胖子當著我的面吹牛八千,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敷鸦,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼白修,長吁一口氣:“原來是場噩夢啊……” “哼妒峦!你這毒婦竟也來了?” 一聲冷哼從身側響起兵睛,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤肯骇,失蹤者是張志新(化名)和其女友劉穎窥浪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笛丙,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡寒矿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了若债。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拆融,死狀恐怖蠢琳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镜豹,我是刑警寧澤傲须,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站趟脂,受9級特大地震影響泰讽,放射性物質發(fā)生泄漏。R本人自食惡果不足惜昔期,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一已卸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硼一,春花似錦累澡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哼蛆,卻和暖如春蕊梧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腮介。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工肥矢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叠洗。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓橄抹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惕味。 傳聞我的和親對象是個殘疾皇子楼誓,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)名挥,斷路器疟羹,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,127評論 0 7
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法榄融,繼承相關的語法参淫,異常的語法,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • 致自己……起早摸黑愧杯,忙忙碌碌涎才,就這樣一天一天的過著重復的生活……你會發(fā)現(xiàn),只會有人問你掙多少錢?卻很少有人問你累不...
    verolica閱讀 163評論 0 0
  • 《顧城哲思錄》作者:顧城 有一天力九, 我忽然看見黑色的鳥停在月亮里耍铜, 樹上的花早就開了, 紅花已經(jīng)落了滿地跌前。 這時候...
    小鹿愛生活筆記閱讀 141評論 0 1