亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

JSTL標簽和EL表達式以及Strust2標簽和ognl表達式

2024-04-27 15:17:35
字體:
來源:轉載
供稿:網友

①JSTL (jsp Standard Tag Library ,JSP標準標簽庫)

JSTL標簽庫分為5類:JSTL核心標簽庫、JSTL函數標簽庫、數據庫標簽庫、I18N格式化標簽庫、xml標簽庫。

JSTL的核心標簽庫主要包括:表達式操作、流程控制、迭代操作和URL操作。以下是JSTL常用標簽的用法總結:

一、表達式操作(有out、set、remove、catch,常用out、set)

1、<c:out>

作用:用于顯示數據的內容。語法1:沒有本體內容<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />語法2:有本體內容<c:out value="value" [escapeXml="{true|false}"]>  default value</c:out>屬性說明:value:需要顯示出來的值。default:如果value的值為null時,則顯示default指定的值。escapeXml:是否轉換特殊字符,默認為true。即默認會將<、>、’、” 和 & 轉換為 &lt;、&gt;、&#039;、&#034和&amp。如果設為false,則不進行轉換。

2、<c:set>作用:用于將變量的值存儲在JSP范圍中或javaBean的屬性中。語法1:將value的值存儲在范圍為scope的varName變量中<c:set value="value" var="varName" [scope="{page|request|session|application}"] />語法2:將本體內容的數據存儲在范圍為scope的varName變量中<c:set var="varName"  [scope="{page|request|session|application}"] >...本體內容</c:set>語法3:將value的值存儲在target對象的PRoperty屬性中<c:set value="value" target="target" property="propertyName" />語法4:將本體內容的數據存儲在target對象的property屬性中<c:set target="target" property="propertyName">...本體內容</c:set>屬性說明:value:要被存儲的值。var:欲存入的變量名稱。scope:var變量的JSP范圍。默認為page范圍。target:為一JavaBean或Map對象。

 

二、控制流程

<c:if>作用:類似if判斷語句,用于表達式判斷。語法1:沒有本體內容<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />語法2:有本體內容<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"] />...本體內容</c:if>屬性說明:test:當該屬性中的表達式運算結果為true,則會執行本體內容,為false則不執行,該標簽必須要有test屬性。var:存儲test的運算結果,為true或false。scope:var變量的JSP范圍。

 

三、迭代操作

<c:forEach>作用:為循環控制,它可以將集合(Collection)中的成員循序瀏覽一遍。運作方式為當條件符合時,就會持續重復執行<c:forEach>的本體內容。語法1:迭代一個集合對象中的所有成員<c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] />...本體內容</c:forEach>語法2:迭代指定次數<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>...本體內容</c:forEach> 屬性說明:items:被迭代的集合對象。var:存放當前指到的集合對象中的成員。varStatus:存放當前指到的成員的相關信息。(index:當前指到的成員的索引;count:當前總共指到成員的總數;first:當前指到的成員     是否為第一個成員;last:當前指到的成員是否為最后一個成員)。begin:迭代開始的位置,默認為0。end:迭代結束的位置,默認為最后。step:每次迭代的間隔數,默認為1。范例:<% int atts[] = {1,2,3,4,5,6,7,8,9,10}; request.setAttribute("atts", atts); %> <c:forEach items="${atts}" var="item" begin="0" end="9" step="1" > ${item}</br> </c:forEach>  此標簽也可以用于普通的循環控制,與for循環一樣。如:<c:forEach begin="1" end="10" var="item" > ${item}</br> </c:forEach> 

 

四、URL操作

 

五、l18N格式化標簽庫

 

②EL表達式

單純在jsp頁面中出現,是在四個作用域中取值,page,request,session,application.如果在struts環境中,它除了有在上面的四個作用域的取值功能外,還能從值棧(valuestack)中取值.

簡單記憶EL表達式的格式為${student.name}

JSTL和EL在JSP中的共同應用如下:

5.<html>     6.<body>     7.    <%     8.        Map<User,String[]> map = new HashMap<User,String[]>();     9.        String temp[] = new String[2];     10.        User user1 = new User();     11.        user1.setName("zhangsan");     12.        user1.setAge(20);     13.        temp[0] = "1";     14.        temp[1] = "111111";     15.        map.put(user1, temp);     16.             17.        User user2 = new User();     18.        user2.setName("lisi");     19.        user2.setAge(22);     20.        temp = new String[2];     21.        temp[0] = "2";     22.        temp[1] = "2222222";     23.        map.put(user2, temp);     24.        request.setAttribute("m",map);     25.    %>     26.    <c:forEach items="${m}" var="user">     27.        <tr>     28.            <td>${user.key.name}</td>     29.            <td>${user.key.age}</td>     30.            <td>${user.value[0]}</td>     31.            <td>${user.value[1]}</td>     32.        </tr>     33.        <br>     34.    </c:forEach>     35.</body>     36.</html> 

 

③Strust2標簽

(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表達式

OGNLStruts 2默認的表達式語言。是Object Graphic Navigation Language(對象圖導航語言)的縮寫,它是一個開源項目。

1.#符號的用途一般有三種。    1)訪問非根對象屬性,例如示例中的#session.msg表達式,由于Struts 2中值棧被視為根對象,所以訪問其他非根對象時,需要加#前綴。實際上,#相當于ActionContext.getContext();;#session.msg表達式相當于ActionContext.getContext().getSession(). getAttribute(”msg”) 。     2)用于過濾和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

    3)用來構造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。

2.%符號 %符號的用途是在標志的屬性為字符串類型時,計算OGNL表達式的值。如下面的代碼所示: 構造Map

[html] view plaincopy<s:setname=”foobar”value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}”/> <p>The value of key “foo1″ is <s:propertyvalue=”#foobar['foo1']”/></p> <p>不使用%:<s:urlvalue=”#foobar['foo1']”/></p> <p>使用%:<s:urlvalue=”%{#foobar['foo1']}”/></p>  [html] view plaincopy<s:setname=”foobar”value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}”/> <p>The value of key “foo1″ is <s:propertyvalue=”#foobar['foo1']”/></p> <p>不使用%:<s:urlvalue=”#foobar['foo1']”/></p> <p>使用%:<s:urlvalue=”%{#foobar['foo1']}”/></p>  

3.$符號

$符號主要有兩個方面的用途。    在國際化資源文件中,引用OGNL表達式,例如國際化資源文件中的代碼:reg.agerange=國際化資源信息:年齡必須在${min}同${max}之間。     在Struts 2框架的配置文件中引用OGNL表達式,例如下面的代碼片斷所示:

[html] view plaincopy<validators>    <fieldname=”intb”>            <field-validatortype=”int”>            <paramname=”min”>10</param>            <paramname=”max”>100</param>            <message>BAction-test校驗:數字必須為${min}為${max}之間!</message>        </field-validator>    </field> </validators> [html] view plaincopy<validators>    <fieldname=”intb”>            <field-validatortype=”int”>            <paramname=”min”>10</param>            <paramname=”max”>100</param>            <message>BAction-test校驗:數字必須為${min}為${max}之間!</message>        </field-validator>    </field> </validators> 

 

PS:1.四者都是在JSP上,用于取值、設參等功能,jstl標簽是以<c:>開頭,strust2標簽是以<s:>開頭,EL表達式是${XXX.XXX},ognl表達式是#、%、$XXX。

      2.ognl表達式和EL表達式的區別:ognl是通常要結合Struts 2的標志一起使用,如<s:property value="#xx" /> struts頁面中不能單獨使用。而EL可以單獨使用${sessionScope.username},也可以結合JSL使用,如<c:forEach item="${stuent}" var="user">

     3.ognl是struts2特有的表達式,使用ognl ,struts2就無需將對象手動放值進request等范圍,頁面直接取值。jstl是標簽庫,比如c標簽,用來前臺頁面的變量的定義呀、作用域里的變量對象的取值呀等。。el是和jstl聯用,jstl用來取值,而el用來展示。el也可直接取值展示作用域里對象變量。

 

簡單記憶:JSTL(標簽)——EL(表達式)     Strust2(標簽)——ognl(標簽)

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩大片免费观看视频播放| 亚洲激情国产精品| 青青久久aⅴ北条麻妃| 国产精品成av人在线视午夜片| 国产精品人成电影| 国产精品www网站| 国产99久久精品一区二区| 国产精品白丝av嫩草影院| 国产激情综合五月久久| 69视频在线免费观看| 欧美与黑人午夜性猛交久久久| 国产日产久久高清欧美一区| 7777精品视频| 中文字幕欧美精品日韩中文字幕| 性欧美在线看片a免费观看| 久久久精品视频在线观看| 亚洲石原莉奈一区二区在线观看| 日韩免费观看网站| 欧美精品在线第一页| 日韩av大片免费看| 国精产品一区一区三区有限在线| 欧美性在线观看| 精品爽片免费看久久| 福利视频一区二区| 久久久久久美女| 国产精品久久久久久一区二区| 亚洲电影免费在线观看| 国产日韩精品在线观看| 国产成人精品999| 亚洲综合av影视| 中文字幕av一区二区| 亚洲第一区在线观看| 亚洲国产精品嫩草影院久久| 国产精品欧美日韩一区二区| 热re99久久精品国产66热| 亚洲精品成a人在线观看| 久久人人爽亚洲精品天堂| **欧美日韩vr在线| 欧美性理论片在线观看片免费| 91在线高清视频| 亚洲国产精品小视频| 精品国产乱码久久久久久天美| 欧美另类在线观看| 欧美一性一乱一交一视频| 在线观看日韩www视频免费| 精品少妇一区二区30p| 亚洲欧美国产日韩天堂区| 国产精品久久久久77777| 麻豆一区二区在线观看| 欧美日韩国内自拍| 久久久成人精品| 欧美大全免费观看电视剧大泉洋| 精品日本高清在线播放| 欧美极品少妇xxxxⅹ免费视频| 国产欧美日韩精品丝袜高跟鞋| 日韩精品高清视频| 精品国产视频在线| 亚洲视频在线免费看| 91九色在线视频| 久久99久国产精品黄毛片入口| 久久影视电视剧免费网站清宫辞电视| 国产精品久久久久久久av电影| 国内精品视频一区| 亚洲视频在线免费观看| 亚洲性猛交xxxxwww| 日韩中文视频免费在线观看| 91网站免费观看| 91丝袜美腿美女视频网站| 久久久国产一区二区三区| 国产精品三级在线| 欧美大片免费观看在线观看网站推荐| 色婷婷综合久久久久| 青青久久av北条麻妃黑人| 国产成人激情小视频| 91精品国产91久久| 精品久久久久久国产| 久久亚洲精品国产亚洲老地址| 91av视频在线播放| 96精品视频在线| 欧美激情免费看| 日韩免费精品视频| xxxx性欧美| 国产精品久久久久久网站| 欧美精品一二区| 国产精品直播网红| 亚洲三级黄色在线观看| 欧美高清视频一区二区| 色偷偷88888欧美精品久久久| 久久精彩免费视频| 亚洲欧洲第一视频| 国产+成+人+亚洲欧洲| 中文字幕在线观看亚洲| 久久影院免费观看| 久久香蕉精品香蕉| 中文字幕国产亚洲2019| 欧美亚洲第一页| 91嫩草在线视频| 久久精品美女视频网站| 国产免费一区视频观看免费| 亚洲自拍中文字幕| 国产精品精品视频一区二区三区| 成人免费高清完整版在线观看| 日韩中文字幕av| 国产丝袜精品第一页| 精品久久中文字幕| 成人av电影天堂| 国产一区二区三区精品久久久| 国产91精品青草社区| 国产精品99久久99久久久二8| 国产精品中文久久久久久久| 国产91色在线| 中文字幕国产精品| 日韩欧美国产成人| 欧美最猛黑人xxxx黑人猛叫黄| 日韩精品在线免费观看视频| 欧美日韩亚洲天堂| 日韩视频免费在线| 亚洲精品乱码久久久久久金桔影视| 亚洲精品国产成人| 亚洲亚裔videos黑人hd| 欧美影院久久久| 国产精品久久久久久久一区探花| 在线丨暗呦小u女国产精品| 日韩精品亚洲精品| 色偷偷av一区二区三区乱| 欧美一区二区三区精品电影| 欧美成人激情在线| 亚洲第一中文字幕| 成人精品久久一区二区三区| 亚洲色图校园春色| 欧美日韩在线影院| 国产欧美日韩亚洲精品| 欧美放荡办公室videos4k| 91免费看片在线| 日韩av电影国产| 久久久久久久av| 亚洲在线视频福利| 久久人91精品久久久久久不卡| 欧美日韩国产成人高清视频| 日韩中文在线视频| 亚洲精品电影网在线观看| 亚洲精品久久久久| 国产精品福利在线观看| 欧美大片免费看| 久久精品2019中文字幕| 欧美日韩xxx| 精品久久久久久久久中文字幕| 浅井舞香一区二区| 日韩免费在线看| 国产香蕉一区二区三区在线视频| 亚洲一区二区三区sesese| 国产+成+人+亚洲欧洲| 黄色一区二区在线观看| 国产美女久久久| 国产激情综合五月久久| 91精品国产91久久久久久最新| 国产精品1234| 欧美午夜丰满在线18影院| 精品美女久久久久久免费| 欧美日韩一区二区三区在线免费观看| 浅井舞香一区二区| 91日本视频在线| 久久久av亚洲男天堂| 动漫精品一区二区|