




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、EL表達式El表達式格式:$sessionScope.user.age:表示為session范圍內的user屬性的age屬性的值或者這樣表示:$sessionScope.user“age”,中括號中age代表為user中的屬性相當于以下代碼 User user2 = (User)session.getAttribute("user"); String age = user2.getAge(); 什么情況下使用來獲取屬性?當屬性的名稱包含.符號時,只能用方式去獲取這個屬性,而不能使用.方式如下所示: User user3 = new User(); user3.setName
2、("zheng");session.setAttribute("com.user", user3);name:$sessionS. /此種情況獲取不到name的值 name2: $sessionScope"com.user".name /只能用的方式來獲取上面的sessionScope可以省略不寫,如果不寫的話,將從小范圍的域開始查找。既依次request域,session域,Application域,如果找到就直接返回,不在繼續下去,如果所有域都找不到該屬性,則回傳null。EL可以進行自動的類型轉換 例如scop
3、e:$param.scope +11 如果param.scope為數字,可以自動轉換為兩個數的相加隱含對象輸入相關的隱含對對象1,param 獲取一個 $param.scope 相當于 request.getParameter(“scope”);2,paramValues 獲取一組數據,得到是一個數組$paramV 相當于 request.getParameterValues(“name”)其他隱含對象cookie,header,pageContext(重要) PageContext對象,可以獲取頁面和請求的所有信息 pageContext:$pageContext.req
4、uest.contextPath /獲取web應用名稱 SessionId :$pageContext.session.id /獲取當前session的idrequestUrl :$pageContext.request.requestURL /獲取當前頁面的路徑EL關系運算符(關系運算符必須放在里面,放在外面無效)EL邏輯運算符(邏輯運算符必須放在里面,放在外面無效)EL 的empty運算符<!-empty可以作為一個集合,若該集合不存在或集合中沒有元素,其結果都為true,否則為false -> names is Empty: $ empty requestS
5、ListEL ()運算符,代表運算的優先級。EL還有條件運算符。自定義標簽自定義標簽的開發與應用步驟1,編寫完成標簽功能的java類(標簽處理器)實現SimpleTag接口public class MySimpleTag implements SimpleTag也可以繼承SimpleTagSupportpublic class ReadFileTag extends SimpleTagSupport2,編寫標簽描述文件(tld),在tld文件中對自定義的標簽進行描述在WEB-INF文件夾下新建一個tld文件<?xml version="1.0" encoding=&q
6、uot;UTF-8" ?><taglib xmlns=" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation=" version="2.0"> <!- 描速TLD文件 -> <description>MyTag1.0 core library</description> <display-name>MyTag core</display-name> <
7、tlib-version>1.0</tlib-version> <!- 用來在頁面上使用標簽的前綴 -> <short-name>m</short-name> <!- 作為tld文件的 id,用來唯一標識當前的TLD文件,多個tld文件的id不能重復, 在jsp頁面中通過taglib標簽的uri屬性來引入使用-> <uri> <!- 描述自定義的MySimpleTag標簽 -> <tag> <!- 在頁面中使用的標簽名 -> <name>myTag</name&g
8、t; <!- 標簽所在的類路徑名 -> <tag-class>com.zheng.tag.MySimpleTag</tag-class> <!- 標簽體的類型 -> <body-content> empty </body-content> </tag></taglib> 3,在JSP頁面中導入和使用自定義標簽導入:<% taglib prefix="m" uri=" %> 使用: <m:myTag/>setJspContext:一定會被JSP引擎
9、所調用,先于doTag方法,把jsp引擎的pageContext傳給標簽處理器。實現方法如下:private PageContext pageContext;/JSP引擎把pageContext對象引入/pageContext可以獲取其他8個隱含對象Overridepublic void setJspContext(JspContext arg0) System.out.println("setJspContext");this.pageContext = (PageContext) arg0;帶屬性的自定義標簽1,先在標簽處理器類中定義該屬性的setter方法,建議所以屬
10、性都設置為String類型。 private String value;private String count;public void setValue(String value) this.value = value;public void setCount(String count) this.count = count;2,在tld文件中描述屬性<!- 描述當前標簽的屬性 -> <attribute> <!- 當前屬性的名稱 必須和標簽處理器中定義的屬性名稱一致-> <name>value</name> <!- 屬性是否
11、可必須 -> <required>true</required> <!- 當前屬性是否可以接受運行時表達式的動態值 -> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>count</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute>3,在頁
12、面中使用該屬性<m:myTag value="$ " count="10"/>帶標簽體的自定義標簽1,有標簽體的標簽<t:testJspFragment>helloWorld</t:testJspFragment>在自定義標簽的標簽處理器中使用JspFragment對象封裝標簽體信息2,jsp引擎會調用setJspBody()方法把JspFragment傳遞給標簽處理器類,在SimpleTagSupport類中還定義了一個getJspBody()方法,用于返回JspFragment對象。3,JspF
13、ragmen中的invoke(writer)方法:invoke(writer):writer即為標簽體內容輸出的字符流,若為null,則輸出到getJspContext().getOut(),即輸出到頁面上。有時可以借助StringWriter對象來得到標簽體的內容。4,在tld文件中,使用<body-content>來描述標簽體的類型:類型如下圖簡單實現forEach標簽forEach標簽有兩個屬性,items:集合類型(Collection),var:String類型1,標簽處理器類package com.zheng.tag;import java.io.IOException
14、;import java.util.Collection;import javax.servlet.jsp.JspContext;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;public class ForEachTag extends SimpleTagSupport private Collection<?> items; private String var;
15、public void setVar(String var) this.var = var; public void setItems(Collection<?> items) this.items = items; Override public void doTag() throws JspException, IOException /遍歷items集合 if(null != items) for(Object obj : items) /*把正在遍歷的對象放入到pageContext中,鍵:var,值:正在遍歷的對象*/ JspContext jspContext = th
16、is.getJspContext(); jspContext.setAttribute(var, obj); /把標簽體的內容直接輸出到頁面上。 JspFragment fragMent = this.getJspBody(); fragMent.invoke(null); TLD描述文件<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns=" xmlns:xsi="/2001/XMLSchema-instance" xsi
17、:schemaLocation=" version="2.0"> <description>MyTag2 1.0 core library</description> <display-name>MyTag2 core</display-name> <tlib-version>1.0</tlib-version> <short-name>t</short-name> <uri> <tag> <name>forEach</n
18、ame> <tag-class>com.zheng.tag.ForEachTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>items</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>
19、var</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag></taglib> 3,頁面上調用<br/> <% List<User> users = new ArrayList<User>(); users.add(new User("zheng1",17); users.add(new User("zheng2&
20、quot;,15); users.add(new User("zheng3",18); users.add(new User("zheng4",19); request.setAttribute("users", users); %> <t:forEach items="$requestScope.users " var="u"> $ - $u.age </t:forEach>帶有父標簽的自定義標簽1,父標簽無法獲取子標簽的引用,僅把子標簽作為標簽體來使
21、用。2,子標簽可以通過getParent()方法來獲取父標簽的引用(需繼承 SimpleTagSupport或實現SimpleTag接口)package com.zheng.tag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;/* * 父標簽處理器 * author DELL * */public class ParentTag extends SimpleTagSupportprivate String nam
22、e ="Zheng"public String getName() return name; Override public void doTag() throws JspException, IOException System.out.println("父標簽處理器的name :"+name); this.getJspBody().invoke(null); package com.zheng.tag;import java.io.IOException;import javax.servlet.jsp.JspException;import jav
23、ax.servlet.jsp.tagext.JspTag;import javax.servlet.jsp.tagext.SimpleTagSupport;public class SonTag extends SimpleTagSupport Override public void doTag() throws JspException, IOException /1,得到父標簽的引用 JspTag parent = this.getParent(); /2,獲取父標簽的name屬性 ParentTag parentTag = (ParentTag) parent; String name
24、 = parentTag.getName(); /3,把name的值輸出到頁面上 getJspContext().getOut().print("子標簽輸出name :" +name); 3,注意父標簽的類型是JspTag類型,該接口是一個空接口,用來同意SimpleTag 和 Tag的,實際使用的時候需要進行類型的強制轉換。4,在tld文件中無需對父標簽進行額外的配置<!- 父標簽 -> <tag> <name>parentTag</name> <tag-class>com.zheng.tag.ParentTag
25、</tag-class> <!- 因為子標簽以標簽體存在,所以這里一定要指定為scriptless類型 -> <body-content>scriptless</body-content> </tag> <!- 子標簽 -> <tag> <name>sonTag</name> <tag-class>com.zheng.tag.SonTag</tag-class> <body-content>empty</body-content> <
26、/tag>5,在頁面上引用 <t:parentTag> <t:sonTag/> </t:parentTag>開發3個標簽:choose,when,otherwise其中when標簽有一個boolean類型的屬性:testchoose是when和otherwise的父標簽,when在otherwise前使用。1,Choose標簽處理器package com.zheng.tag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.
27、tagext.SimpleTagSupport;public class ChooseTag extends SimpleTagSupport private boolean flag = true; public void setFlag(boolean flag) this.flag = flag; public boolean isFlag() return this.flag; Overridepublic void doTag() throws JspException, IOException getJspBody().invoke(null);When標簽處理器package c
28、om.zheng.tag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class WhenTag extends SimpleTagSupportprivate boolean test;public void setTest(boolean test) this.test = test; Overridepublic void doTag() throws JspException, IOExce
29、ption if(test) ChooseTag chooseTag = (ChooseTag) this.getParent(); boolean flag = chooseTag.isFlag(); if(flag) this.getJspBody().invoke(null); chooseTag.setFlag(false); otherwise標簽處理器package com.zheng.tag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagex
30、t.SimpleTagSupport;public class OtherwiseTag extends SimpleTagSupport Overridepublic void doTag() throws JspException, IOException ChooseTag chooseTag = (ChooseTag) this.getParent(); if(chooseTag.isFlag() this.getJspBody().invoke(null); 2,tld描述文件 <tag> <name>choose</name> <tag-c
31、lass>com.zheng.tag.ChooseTag</tag-class> <body-content>scriptless</body-content> </tag> <tag> <name>when</name> <tag-class>com.zheng.tag.WhenTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>test
32、</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>otherwise</name> <tag-class>com.zheng.tag.OtherwiseTag</tag-class> <body-content>scriptless</body-content> </tag>
33、;3,頁面上調用<t:choose> <t:when test="$param.age > 24 ">大學畢業</t:when> <t:when test="$param.age > 18 ">高中畢業</t:when> <t:when test="$param.age > 15 ">初中畢業</t:when> <t:otherwise>初中以下</t:otherwise> </t:choose>E
34、L 的自定義函數的開發步驟1,映射Java類中的靜態方法2,這個java類必須帶有public符修飾3,方法必須帶有public修飾的靜態方法public class MyELFunction public static String concat(String str1,String str2) return str1 + str2; 4,在tld文件中描述這個函數,在頁面上導入使用即可。<!- 描述EL的自定義函數 -> <function> <!- 函數名 -> <name>concat</name> <!- 函數所在的類
35、路徑 -> <function-class>com.zheng.tag.MyELFunction</function-class> <!- 函數的簽名 -> <function-signature>java.lang.String concat(java.lang.String,java.lang.String)</function-signature> </function>JSTL標簽1,JSTL表達式操作 <c:out>可以對要輸出的敏感字符進行自動轉換,其有三個屬性如下圖<c:set>
36、 <c:set var="name" value="zheng" scope="page"></c:set> value的值也可以是個EL表達式,相當于<% pageContext.setAttribute(“name”,”zheng”) %><c:set>為JavaBean的屬性賦值<% User user = new User(); request.setAttribute("user", user); %> target:將要存放的JavaBean對
37、象,property:JavaBean中的對象,value:給屬性賦值 <c:set target="$user" property="id" value="$ param.id "></c:set> <br/> <c:remove>移除屬性中的變量<c:set var="date" value="1997-03-19" scope="session"/> date:$ sessionScope.date <!
38、- 存在屬性的值 -> <br/> <!- 移除屬性的值 -> <c:remove var="date" scope="session"/> date:-$ sessionScope.date - <!- 值已被移除 ->2,JSTL流程控制<c:if>可以對相應的值進行判斷,其屬性如下test:EL表達式判斷(必須),var:判斷后的true或false存放的變量,scope:范圍域<c:set value="20" var="age" sc
39、ope="request"></c:set> <!- 如果age大于18 就執行標簽體中的內容 -> <c:if test="$ requestScope.age > 18 ">成年了!</c:if> <c:choose>,<c:when>,<c:otherwise><c:choose> <c:when test="$ param.age > 60 ">老年!</c:when> <c:when
40、 test="$ param.age > 30 ">中年!</c:when> <c:when test="$ param.age > 18 ">青年!</c:when> <c:otherwise>未成年!</c:otherwise> </c:choose>3,JSTL 迭代操作<c:forEach>為循環控制,它可以將集合(Collection)中的成員循序瀏覽一遍,運作方式當條件符合時,就會持續重復執行<c:forEach>的本體內容。其屬
41、性描述如下圖 <!- begin:從哪開始,end:到那結束,step:間隔 -> <c:forEach begin="1" end="10" step="3" var="i"> $ i - <!- 輸出:1 - 4 - 7 - 10 - -></c:forEach><% List<User> users = new ArrayList<User>(); users.add(new User("zheng1",17); users.add(new User("zheng2",18); users.add(new User("zheng3",19); request.setAttribute("users", users); %> <!- items:集合或map或array對象 ,var:每一個實例,varStatus: -> <!-遍歷List,遍歷數組
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目管理考試內容理解試題及答案
- 項目管理資格認證考試回顧試題及答案
- 2024年項目管理專業人士資格考試預測試題及答案
- 2025年會計崗位職責試題及答案
- 洗煤廠粉塵治理施工方案
- 微生物檢驗技師的基本知識試題及答案
- 財務政策對公司戰略的影響試題及答案
- 水泥土換填施工方案批復
- 管道工程測量與定位考核試卷
- 2024年項目管理能力評估試題及答案
- 鐵粉運輸合同協議
- 廣東省珠海市2024-2025學年七年級下學期期中考試英語試題(無答案)
- 2024年中國南水北調集團水網發展研究有限公司招聘考試真題
- (四調)武漢市2025屆高中畢業生四月調研考試 語文試卷(含答案詳解)
- 2025年融媒體中心招聘考試筆試試題(60題)附答案
- 公司事故隱患內部報告獎勵制度
- 大學生創新創業基礎(創新創業課程)完整全套教學課件
- GIS組合電器課件
- 村田數控沖床安裝步驟_圖文
- 語法填空題教案
- 白油安全技術說明書(共2頁)
評論
0/150
提交評論