Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
生活随笔
收集整理的這篇文章主要介紹了
Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來自:http://blog.csdn.net/love_you_99/article/details/8184797
一 介紹
1.Struts2的作用 ??Struts2標簽庫提供了主題、模板支持,極大地簡化了視圖頁面的編寫,而且,struts2的主題、模板都提供了很好的擴展性。實現了更好的代碼復用。Struts2允許在頁面中使用自定義組件,這完全能滿足項目中頁面顯示復雜,多變的需求。
Struts2的標簽庫有一個巨大的改進之處,struts2標簽庫的標簽不依賴于任何表現層技術,也就是說strtus2提供了大部分標簽,可以在各種表現技術中使用。包括最常用的jsp頁面,也可以說Velocity和FreeMarker等模板技術中的使用
2.Struts2分類
(1)UI標簽:(User ?Interface, 用戶界面)標簽,主要用于生成HTML元素標簽,UI標簽又可分為表單標簽非表單標簽
(2)非UI標簽,主要用于數據訪問,邏輯控制等的標簽。非UI標簽可分為流程控制標簽(包括用于實現分支、循環等流程控制的標簽)和數據訪問標簽(主要包括用戶輸出ValueStack中的值,完成國際化等功能的)
(3)ajax標簽
3.Struts2標簽使用前的準備:
(1)在要使用標簽的jsp頁面引入標簽庫: ?
<%@ taglib uri="/struts-tags" prefix="s"%>
(2)在web.xml中聲明要使用的標簽 ? ?這樣是struts2 2.3.1.2版本的引入方式
<filter>
? ? ? ? <filter-name>struts2</filter-name>
? ? ? ? ? ? ? ? ? ? ? ? ?<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
? ? </filter>
4.標簽的使用
(1)property標簽
? ? 用于輸出指定的值:
? ? <s:property value="%{@cn.csdn.hr.domain.User@Name}"/><br/>
? ? ? ? <s:property value="@cn.csdn.hr.domain.User@Name"/><Br/><!-- 以上兩種方法都可以 -->
? ? ? ? <s:property value="%{@cn.csdn.hr.domain.User@study()}"/>
? ? 以上可以訪問某一個包的類的屬性的集中方式,study()是訪問方法的方法,并輸出。
? ? 以下用java代碼代替的,訪問某一個范圍內的屬性
? ? <%
? ? //采用pageContext對象往page范圍內存入值來 驗證#attr搜索順序是從page開始的 ,搜索的順序為:page,reques,session,application。
set存值的時候存到的是request中,在jsp頁面中訪問的時候不用加任何的標識符,即可直接訪問,如果不同的作用域不一樣了,
pageContext.setAttribute("name", "laoowang", PageContext.PAGE_SCOPE);
%>
<s:property value="#attr.name" />
?
假設在action中設置了不同作用域的類
不同的作用域的標簽的訪問:
? <h3>獲取的是requet中的對象值</h3>
? 第一種方式:<s:property value="#request.user1.realName"/>
? <br/>
? 第二種方式:<s:property value="#request.user1['realName']"/>
? ?<br/>
? 第三種方式:<s:property value="#user1.realName"/>
? ?<br/>
? 第四種方式:<s:property value="#user1['realName']"/>
? ? ? <br/>
? 第五種方式:${requestScope.user1.realName } ?|| ${requestScope.user1['realName'] }
? 第六種:<s:property value="#attr.user1.realName"/>
? attr對象按page==> ?request sessionapplictio找的
? <h3>獲取session中的值</h3>
? ? 第一種方式:<s:property value="#session.user1.realName"/>
? <br/>
? 第二種方式:<s:property value="#session.user1['realName']"/>
? 第五種方式:${sessionScope.user1.realName } ?|| ${sessionScope.user1['realName'] }
? <h3>獲取application中的對象的值</h3>
? ? 第一種方式:<s:property value="#application.user1.realName"/>
? <br/>
? 第二種方式:<s:property value="#application.user1['realName']"/>
? ? 第五種方式:${applicationScope.user1.realName } ?|| ${applicationScope.user1['realName'] }
(2)iterator標簽的使用
? ? 第一種:list集合
? ? ? ? <!-- 設置set集合 ?value-->
? ? ? ? <!-- status 可選屬性,該屬性指定迭代時的IteratorStatus實例 -->
? ? ? ? <!-- value="#attr.list" ? list存放到了request中 ?可以value="#request.list"
? ? ? ? ? ? ? ? ? ? statu.odd返回當前被迭代元素的索引是否是奇數
? ? ? ? ? ? ? ? -->
? ? <s:set name="list" value="{'a','b','c','d'}"></s:set>
? ? ? ? <s:iterator var="ent" value="#request.list" status="statu">
? ? ? ? ? ? <s:if test="%{#statu.odd}">
? ? ? ? ? ? ? ? <font color="red"><s:property value="#ent" />
? ? ? ? ? ? ? ? </font>
? ? ? ? ? ? </s:if>
? ? ? ? ? ? <s:else>
? ? ? ? <s:property value="#ent" />
? ? ? ? </s:else>
</s:iterator>
第二種:map集合中的使用
? ? <h3>Map集合</h3>
? ? ? ? ? ? ? ? <!-- map集合的特點:
? ? ? ? ? ? ? ? ? 語法格式:# {key:value,key1:value1,key2:value2,.....} ?
?以上的語法中就直接生成了一個Map類型的集合,該Map對象中的每個key-value對象之間用英文的冒號隔開 ?
? ?,多個元素之間用逗號分隔。 ?
? ? ? ? ? ? ? ? -->
? ? ? ? ? ? </div>
? ? ? ? ? ? <s:set var="map" value="#{'1':'laowang','2':'老王','3':'猩猩'}"></s:set>
? ? ? ? ? ? 遍歷Map:
? ? ? ? ? ? <br />
? ? ? ? ? ? <s:iterator value="#map">
? ? ? ? ? ? ? ? <s:property value="key" />:::<s:property value="value" />
? ? ? ? ? ? ? ? <Br />
? ? ? ? ? ? </s:iterator>\
?
第三種:集合的變量
<h3>遍歷集合:::</h3>
? ? ? ? ? ? <div>
? ? ? ? ? ? ? ? <!-- 遍歷出價格大于3000的 -->
? ? ? ? ? ? ? ? <s:iterator var="user" value="#session['users']">
? ? ? ? ? ? ? ? ? ? <s:if test="%{#user['price']>3000}">
? ? ? ? ? ? ? ? ? ? ? ? <s:property value="#user['price']"/>
? ? ? ? ? ? ? ? ? ? </s:if>
? ? ? ? ? ? ? ? </s:iterator>
? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ?<hr color="blue"/><!-- $是取出價格 大于3000的最后一個值 -->
? ? ? ? ? ? ? ? <s:iterator var="u" value="#session.users.{$(#this['price']>3000)}">
? ? ? ? ? ? ? ? ? ? <s:property value="price"/>
? ? ? ? ? ? ? ? </s:iterator>
? ? ? ? ? ? </div>
注:users是User的對象,price是User中的一個屬性
簡述一下iterator的介紹:
iterator標簽用于對集合進行迭代,這里的集合包含List、Set和數組。
<s:set name="list" value="{'zhangming','xiaoi','liming'}" />
<s:iterator value="#list" status="st">
? ? <font color=<s:if test="#st.odd">red</s:if><s:else>blue</s:else>>
? ? <s:property /></font><br>
</s:iterator>
value:可選屬性,指定被迭代的集合,如果沒有設置該屬性,則使用ValueStack棧頂的集合。
id:可選屬性,指定集合里元素的id。
status:可選屬性,該屬性指定迭代時的IteratorStatus實例。該實例包含如下幾個方法:
? ? int getCount(),返回當前迭代了幾個元素。
? ? int getIndex(),返回當前迭代元素的索引。
? ? boolean isEven(),返回當前被迭代元素的索引是否是偶數
? ? boolean isOdd(),返回當前被迭代元素的索引是否是奇數
? ? boolean isFirst(),返回當前被迭代元素是否是第一個元素。
? ? boolean isLast(),返回當前被迭代元素是否是最后一個元素。
?
(3)if else語句的使用
? ? <s:set name="age" value="21" />
? ? <s:if test="#age==23">
? ? 23
</s:if>
<s:elseif test="#age==21">
? ? 21
</s:elseif>
<s:else>
? ? 都不等
</s:else>
(4)URL標簽
? ? <!-- 聲明一個URL地址 -->
? ? ? ? <s:url action="test" namespace="/tag" var="add">
? ? ? ? ? ? <s:param name="username">laowangang</s:param>
? ? ? ? ? ? <s:param name="id">12</s:param>
? ? ? ? </s:url>
? ? ? ? <s:a href="%{add}">測試URL</s:a>
? ? ? ? <s:a action="test" namespace="/tag"></s:a>
? ? 以上的兩個<s:a>標簽的作用是一樣的。
(5)data標簽
<%
? ? ? ? ? ? pageContext.setAttribute("birth",new Date(200,03,10),PageContext.REQUEST_SCOPE);
? ? ? ? ?%>
? ? ? ? <s:date name="#request.birth" format="yyyy年MM月dd日"/>
? ? ? ? <s:date name="#request.birth" nice="true"/>
? ? 這個標簽是按照format的格式去輸出的。
(6)表單
? ? ? ? <h1>from表單</h1>
? ? ? ? <s:form action="test" namespace="/tag">
? ? ? ? ? ? <s:textfield label="用戶名" name="uname" tooltip="你的名字" javascriptTooltip="false"></s:textfield>
? ? ? ? ? ? <s:textarea ?name="rmake" cols="40" rows="20" tooltipDelay="300" tooltip="hi" label="備注" javascriptTooltip="true"></s:textarea>
? ? ? ? ? ? <s:password label="密碼" name="upass"></s:password>
? ? ? ? ? ? <s:file name="file" label="上傳文件"></s:file>
? ? ? ? ? ? <s:hidden name="id" value="1"></s:hidden>
? ? ? ? ? ? <!--
? ? ? ? ? ? <select name="edu">
? ? ? ? ? ? ? ? <option value="listKey">listValue</option>
? ? ? ? ? ? ?-->
? ? ? ? ? ? <s:select list="#{'1':'博士','2':'碩士'}" name="edu" label="學歷" listKey="key" listValue="value"></s:select>
? ? ? ? ? ? <s:select list="{'java','.net'}" value="java"></s:select><!-- value是選中的 -->
? ? ? ? ? ? <!-- 必須有name -->
? ? ? ? ? ? <s:checkbox label="愛好 " fieldValue="true" name="checkboxFiled1"></s:checkbox>
? ? ? ? ? ? ?
? ? ? ? ? ? <!-- 多個checkbox -->
? ? ? ? ? ? <s:checkboxlist list="{'java','css','html','struts2'}" label="喜歡的編程語言" name="box" value="{'css','struts2'}"></s:checkboxlist>
?
? ? ? ? ? ? <!-- map集合前要加# -->
? ? ? ? ? ? <s:checkboxlist list="#{1:'java',2:'css',3:'html',4:'struts2',5:'spring'}" label="喜歡的編程語言" name="boxs" value="{1,2}"></s:checkboxlist>
? ? ? ? ? ? <!-- listKey
? ? ? ? ? ? ? ? listValue
? ? ? ? ? ? ? ? <input type="text" name="boxs" value="listKey">顯示值listValue
? ? ? ? ? ? ?-->
? ? ? ? ? ? <!-- radio --> ? ? ??
? ? ? ? ? ? <%
? ? ? ? ? ? ? ? //從服務器傳過來值
? ? ? ? ? ? ? ? pageContext.setAttribute("sex","男",PageContext.REQUEST_SCOPE);
? ? ? ? ? ? ? ? pageContext.setAttribute("sex1","男",PageContext.REQUEST_SCOPE);
? ? ? ? ? ? ?%>
? ? ? ? ? ? <s:radio list="{'男','女'}" name="sex" value="#request.sex"></s:radio> ??
? ? ? ? ? ? <s:radio list="#{1:'男',2:'女'}" name="sex1" listKey="key" listValue="value" value="#request.sex1"></s:radio> ? ? ? ?
? ? ? ? ? ? <!-- 防止表單提交的方式 -->
? ? ? ? ? ? <s:token></s:token>
? ? ? ? ? ? <s:submit value="提交"></s:submit>
? ? ? ? </s:form>
一、什么是OGNL,有什么特點? ??
??
OGNL(Object-Graph Navigation Language),大概可以理解為:對象圖形化導航語言。是一種可以方便地操作對象屬性的開源表達式語言。OGNL有如下特點: ? ?
??
1、支持對象方法調用,形式如:objName.methodName(); ??
??
2、支持類靜態的方法調用和值訪問,表達式的格式為@[類全名(包括包路)]@[方法名 | ?值名],例如: ??
??
@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME; ??
??
3、支持賦值操作和表達式串聯,例如: ??
??
price=100, discount=0.8, calculatePrice(),這個表達式會返回80; ??
??
4、訪問OGNL上下文(OGNL context)和ActionContext; ??
??
5、操作集合對象。 ??
二、使用OGNL表達式 ??
OGNL要結合struts標簽來使用。由于比較靈活,也容易把人給弄暈,尤其是“%”、“#”、“$”這三個符號的使用。由于$廣泛應用于EL中,這里重點寫%和#符號的用法。 ??
1、“#”符號有三種用途: ??
(1)、訪問非根對象(struts中值棧為根對象)如OGNL上下文和Action上下文,#相當于ActionContext.getContext();下表有幾個ActionContext中有用的屬性: ??
名稱 ? ? ? ? ? ? 作用 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子 ? ? ?
parameters ? 包含當前HTTP請求參數的Map ? ? ? ? ? ? ? ? ? ? ?#parameters.id[0]作用相當于request.getParameter("id") ? ?
? ??
request ? ? ?包含當前HttpServletRequest的屬性(attribute)的Map ? #request.userName相當于request.getAttribute("userName") ? ?
? ??
session ? ? ?包含當前HttpSession的屬性(attribute)的Map ? ?#session.userName相當于session.getAttribute("userName") ? ??
application ?包含當前應用的ServletContext的屬性(attribute)的Map ? #application.userName相當于application.getAttribute("userName") ? ?
? ??
注:attr 用于按request > session > application順序訪問其屬性(attribute),#attr.userName相當于按順序在以上三個范圍(scope)內讀取userName屬性,直到找到為止。用于過濾和投影(projecting)集合,如books.{?#this.price<100};構造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。 ??
??
(2)、用于過濾和投影(projecting)集合,如: books.{?#this.price>35} ? ??
books.{?#this.price>35} ??
(3)、構造Map,如: #{'foo1':'bar1', 'foo2':'bar2'} ? ??
#{'foo1':'bar1', 'foo2':'bar2'}這種方式常用在給radio或select、checkbox等標簽賦值上。如果要在頁面中取一個map的值可以這樣寫: ? ?
<s:property value="#myMap['foo1']"/> ? ??
<s:property value="#myMap['foo1']"/> ??
??
2、“%”符號的用途是在標簽的屬性值被理解為字符串類型時,告訴執行環境%{}里的是OGNL表達式。 ??
這是一開始最讓我不能理解的符號,原因是一些相關資源在表述時不太準備,經過一翻痛苦的探索,終于明白了它的用途。實際上就是讓被理解為字符串的表達式,被真正當成ognl來執行。很有點類似javascript里面的eval_r()功能,例如 : ??
var oDiv = eval_r("document.all.div"+index) ? ??
var oDiv = eval_r("document.all.div"+index) ??
當index變量為1時,語句就會被當作var oDiv = document.all.div1 ?var oDiv = document.all.div1來執行。%{}就是起這個作用。舉例: ? ?
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/> ? ? ?
<s:property value="#myMap['key1']"/> ? ? ?
<s:url value="#myMap['key1']" /> ? ?
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/> ??
<s:property value="#myMap['key1']"/> ??
<s:url value="#myMap['key1']"/> ? ?
上面的代碼第2行會在頁面上輸出“value1”,而第3行則會輸出"#myMap['key1']"這么一個字符串。 如果將第3行改寫成這樣: ??
<s:url value="%{#myMap['key1']}"/> ? ??
<s:url value="%{#myMap['key1']}"/> ??
則輸出為“value1”。 ??
這說明struts2里不同的標簽對ognl的表達式的理解是不一樣的。如果當有的標簽“看不懂”類似“#myMap['key1']”的語句時,就要用%{}來把這括進去,“翻譯”一下了。 ??
3、“$”有兩種用途 ??
(1)、在國際化資源文件中,引用OGNL表達式。 ??
(2)、在Struts 2配置文件中,引用OGNL表達式: ? ?
<action name="saveUser" class="userAction" method="save"> ??
<result type="redirect">listUser.action?msg=${msg}</result> ??
</action> ??
<action name="saveUser" class="userAction" method="save"> ? ? ??
<result type="redirect">listUser.action?msg=${msg}</result> ??
</action>
??
EL表達式:
1.基本格式:${}
2.4種取值范圍:pageScope,requestScope,sessionScope,applicationScope
? ?${requestScope.user.name}
3.基本運算:.和[] ?.用于取屬性[]用于取Array,List,Map,Set
? ?${requestScope.map['apple']},${requestScope.list[1]}
4.{}里允許的運算:算術運算,關系運算,邏輯運算,empty/not empty空判斷
? ?${1+1}
? ?${user.age<18}
? ?${(user.age>18)&&(user.sex=='男')}
? ?${empty user}判斷user對象是否為空
5.EL的11個隱含對象
? ?pageContext,param和paramValues,header和headerValues,cookie,initParam和4種取值范圍對象
? ? *pageContext可獲取jsp的request,response,out,session,config,servletContext等對象
? ? ? ?${pageContext.session.uesr}
? ? header
? ? ? ?${header.host}
? ? *cookie
? ? ? ?${cookie.key}
========================================JSTL標簽庫========================================:
? ?1.核心標簽庫
? ? ? ? a.JSTL表達式標簽
? ? ? ? b.條件標簽
? ? ? ? c.循環標簽
? ? ? ? d.URL操作標簽
? ?2.格式標簽庫(處理國際化,數字和日期格式)
? ?3.SQL標簽庫(可以訪問數據庫)
? ?4.XML標簽庫(可操作XML標記)
? ?5.函數標簽庫(主要是字符串操作函數)
------------------------------------------------------------
需要掌握的JSTL核心庫常用標簽:
引入:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
? ?1.JSTL表達式標簽:
? ? ?<c:out value="${1+1}" default="0"></c:out>
? ? ? 輸出
? ? ? ? ? 屬性:value--表示要顯示的值;可以是字符串,也可以是EL表達式
? ? ? ? ? ? ? ? ?escapeXml--是否轉換特殊字符[默認是true]
? ? ? ? ? ? ? ? ?default--當value中的對象空時的默認顯示
? ? ? <c:set var="" value="" target="" property="" scope=""></c:set>
? ? ? 變量賦值
? ? ? ? ? ?屬性:var--變量名
? ? ? ? ? ? ? ? ?value--值
? ? ? ? ? ? ? ? ?target--目標對象,可以是javaBean,集合對象
? ? ? ? ? ? ? ? ?property--指定到目標對象的屬性
? ? ? ? ? ? ? ? ?scope--變量的作用范圍[page(默認),request,session,application]
? ? ?<c:remove var=""></c:remove>
? ? ?移除變量
? ? ?<c:catsh></c:catch>
? ? ?捕獲異常
? ? ? ? ? ?屬性:var--變量,用于存儲異常信息
? ? ?2.條件表達式標簽:
? ? ? ? <c:if test=""></c:if>
? ? ? ? 條件判斷 ? ? ??
? ? ? ? ? ? 屬性:test--條件表達式
? ? ? ? ? ? ? ? ? var--變量表示條件表達式的值
? ? ? ? ? ? ? ? ? scope--變量范圍
? ? ? ? ?<c:choose>
? ? ? ? ? ? ?<c:when test="">第一種情況</c:when>
? ? ? ? ? ? ?<c:when test="">第二種情況</c:when>
? ? ? ? ? ? ?.....
? ? ? ? ? ? ?<c:otherwise>其他情況</c:otherwise>
? ? ? ? ?</c:choose>
? ? ? 3.循環標簽:
? ? ? ? ?<c:forEach></c:forEach>
? ? ? ? ?循環
? ? ? ? ? ? ?屬性:items--循環類型
? ? ? ? ? ? ? ? ? ?var--循環變量
? ? ? ? ? ? ? ? ? ?begin--循環起始位置(從0算起)
? ? ? ? ? ? ? ? ? ?end--循環結束位置
? ? ? ? ? ? ? ? ? ?sep--每次循環的步長
? ? ? ? ? ? ? ? ? ?varStatus--循環狀態[索引:index,計數:count,是否是首次循環:first ,是否是末次循環:last]
? ? ? ? <c:forTokens></c:forTokens>
? ? ? ? 字符串分割循環
? ? ? ? ? ? ?屬性:iterms--循環對象
? ? ? ? ? ? ? ? ? ?delims--分割字符
? ? ? ? ? ? ? ? ? ?var--循環變量
? ? ? ? ? ? ? ? ? ?begin,end,step,varStatus同forEach標簽
? ? ? 4.URL操作標簽:
? ? ? ? ? <c:import url=""></c:import>
? ? ? ? ? 文件導入
? ? ? ? ? ? ? 屬性:url--被導入資源的路徑
? ? ? ? ? ? ? ? ? ? charEncoding--被導入文件的編碼格式
? ? ? ? ? ? ? 說明:該標簽不僅可導入本站的靜態文件還可導入不同站點的資源文件
? ? ? ? ? <c:redirect url=""></c:redirect
? ? ? ? ? 重定向
? ? ? ? ? <c:url></c:url>
? ? ? ? ? 生成url地址標簽
實驗代碼:
………………………………………………………………………………………………
? ? Hello JSTL標簽: <br>
? ? <h2>表達式標簽</h2>
? ? <c:out value="1+1"/><br>
? ? <c:out value="${1+1}"/><br>
? ? <c:out value="${user}" default="顯示默認值" /><br>
? ? ?<c:out value="${user}">顯示默認值</c:out><br>
? <c:set var="name" value="設置變量"></c:set>
? ? <c:out value="${name}"></c:out><br>
? ? <c:set var="age" value="22"></c:set>
? ? <c:remove var="age"/>
? ? <c:out value="${age}" default="被移除了"></c:out><br>
? ? <c:catch var="exception">
? ? ? ?<%
? ? ? ? ?int s=8/0;
? ? ? ?%>
? ? </c:catch>
? ? <c:out value="異常是:${exception}"></c:out>
? ? <h2>條件標簽</h2>
? ? <c:if test="${empty user}">
? ? ? ? ?user是空對象<br>
? ? </c:if>
? ? <c:if test="${1+1==2}" var="v">
? ? ? ?1+1=2
? ? </c:if><br>
? ? <c:out value="條件是:${v}"></c:out><br>
? ? <c:set var="i" value="9"></c:set>
? ? <c:choose>
? ? ? <c:when test="${i<5}">
? ? ? ? ? i小于5
? ? ? </c:when>
? ? ? <c:when test="${i>5}">
? ? ? ? ? i大于5 ? ? ? ??
? ? ? </c:when>
? ? ? <c:otherwise>
? ? ? ? ? i等于5
? ? ? </c:otherwise>
? ? </c:choose>
? ? <h2>循環標簽</h2>
? ? <%
? ? ? ? List list=new ArrayList();
? ? ? ? list.add("list1");
? ? ? ? list.add("list2");
? ? ? ? list.add("list3");
? ? ? ? list.add("list4");
? ? ? ? list.add("list5");
? ? ? ? list.add("list6");
? ? ? ? request.setAttribute("list",list);
? ? %>
? ? ? <c:out value="${list}"></c:out><br>
? ? <c:forEach items="${list}" var="ite">
? ? ? ?${ite} >>
? ? </c:forEach><br>
? ? <c:forEach items="${list}" begin="3" end="5" var="ite">
? ? ? ?${ite }>>
? ? </c:forEach><br>
? ? <c:forEach items="${list}" begin="0" step="2" var="ite">
? ? ? ?${ite }>>
? ? </c:forEach><br>
? ? <c:forEach items="${list}" var="ite" varStatus="status">
? ? ? ?值:${ite }|索引:${status.index }|當前循環計數:${status.count }|是否為第一次循環:${status.first }
? ? ? ?|是否為最后一次循環:${status.last }<br>
? ? </c:forEach>
? ? <c:set var="string" value="古都,雪國,千只鶴,山音,湖;伊豆的舞女"></c:set>
? ? <c:forTokens items="${string}" delims=",;" var="ite">
? ? ? ${ite }>>
? ? </c:forTokens>
? ? <h2>URL操作標簽</h2>
? ? <!--?
? ? <c:import url="http://www.baidu.com" var="baidu">
? ? </c:import>
? ? -->
? ? ?<iframe src="http://m.weather.com.cn/m/pn12/weather.htm " width="245" height="110" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no"></iframe>
總結
以上是生活随笔為你收集整理的Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 的文件IO相关操作说明
- 下一篇: j2ee servlet 和 threa