多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > struts2_13_OGNL表達式

struts2_13_OGNL表達式

來源:程序員人生   發布時間:2014-09-28 07:38:07 閱讀次數:3098次

全稱Object Graphic Navigation Language(對象圖導航語言)是一個開源項目,是Struts2框架的默認表達式語言。

 

相對于EL表達式,它提供了平時我們需要的一些功能,如:

?支持對象方法調用,如method.sayHello();

?支持類靜態方法調用和值訪問,表達式的格式為@[類全名(包括路徑)]@[法名|值名],例如:@java.lang.String@format(foo %s,bar)或   

   @cn.itcast.Constant@APP_NAME;

?操作集合對象

 

Ognl有一個上下文(Context)概念,用來實現java.utils.Map接口,在Struts2中上下文(Context)的實現為ActionContext。

 

下面為ActionContext包含的對象:

?ValueStack(值棧,它是跟對象)

?parameters

?request

?session

?application

?attr

Struts2接受一個請求時,會迅速創建ActionContext,ValueStackaction然后把action存放入ValueStack中,所以action的實例變量可以被OGNL訪問。

 

訪問上下文(Context)中的對象需要使用#符號標注命名空間,如:#application#session,另外OGNL會設定一個根對象(root對象),在Struts2中根對象就是ValueStack(值棧),如果要訪問根對象的屬性,則可以省略#命名空間,直接訪問該對象的屬性。

 

Struts2中,根對象ValueStack的實現類為OgnlValueStack,該對象存放一組對象,在OgnlValueStack類里面有一個List類型的root變量,就是使用它存放一組對象。

root變量中處于第一位的對象叫做棧頂對象,通常我們在OGNL表達式里直接寫上屬性的名稱即可訪問root變量對象的屬性,搜索順序是從棧頂對象開始尋找,如果棧頂對象不存在該屬性,就會從第二個對象尋找,如果沒有就繼續依次往下訪問,直至找到為止。

 

注意:Struts2中,OGNL表達式需要配合Struts標簽才能使用,如:<s:property value=name/>

 

由于ValueStackstruts2OGNL的根對象,如果用戶需要訪問值棧中的對象,在JSP頁面可以直接通過下面的EL表達式訪問ValueStack中的屬性:

${propertise }//獲得值棧中某個對象的properties屬性

 

如果訪問其它Context中的對象,由于不是根對象,所以在訪問時需要添加#前綴:

?application對象:用于訪問ServletContext方法:#application.userName#application[userName]

  相當于調用ServletContext的   getAttributeuserName)。


?session對象:用于訪問HttpSession方法:#session.userName#session[userName]

  相當于調用session.getAttributeuserName)。

 

?request對象:用于訪問HttpServletrequest屬性的Map方法:#request.userName#request[userName]

  相當于調用request.getAttributeuserName)。

 

?parameters對象:用于訪問Http的請求參數方法:#parameters.userName#parameters[userName]

  相當于調用request.getparameteruserName)

 

?attr對象:用于按page->request->session->application順序訪問起屬性。


property標簽:

property標簽用于輸出指定值:

<s:set name=”name” value=”kk”/> <s:property value=”#naem”/>

default:可選屬性,如果需要輸出屬性的值為null,則顯示該屬性的值

escape:可選屬性,指定是否格式化HTML代碼

value:可選屬性,指定需要輸出的屬性值,如果沒有指定該屬性,則默認輸出 ValueStack棧頂的值

id:可選屬性,指定該元素的標識

 

iterate標簽:

iterate標簽用于對集合進行迭代,這里的集合包含List、Set和數組。

<span style="font-size:12px;"><s:set name=”list” value=”{‘zhao’,’qian’,’sun’}”/> <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></span>

value:可選屬性,指定需要輸出的屬性值,如果沒有指定該屬性,則默認輸出 ValueStack棧頂的值

status:可選屬性,該屬性指定迭代時的iterateStatus實例,

該方法有如下幾個方法:

int getCount(),返回當前迭代了幾個元素

int getIndex(),返回當前迭代元素的索引

boolean isEven(),返回當前被迭代的元素的索引是否是偶數

boolean isOdd(),返回當前被迭代的元素的索引是否是奇數

boolean isFirst(),返回當前被迭代的元素是否為第一個元素

boolean isLast(),返回當前被迭代的元素是否為最后一個

 

if/elseif/else標簽:

<s:set name=”age” value=”33”/> <s:if test=”#age==33”> 33 </s:if> <s:elseif test=”#age==22”> 22 </s:elseif> <s:else> 都不等 </s:else>


url標簽:

<span style="font-size:12px;"><s:set name="age" value="33" scope="request" /> <s:url action="hello" namespace="/test"> <s:param name="personId" value="#request.age"></s:param> </s:url></span>

輸出為:/Ognl/test/hello.action?personId=33  

當標簽的屬性值為字符串類型處理時,”%”符號的用途是計算OGNL表達式的值。

<s:set name="myurl" value="'http://www.hao123.com'" /> <s:url value="%{#myurl}" /> <!-- 使用%{}強制輸出url的value值-->

輸出為:http://www.hao123.com 


表單標簽checkBoxList復選框:

如果集合為list

<struts> <!--默認的視圖主題--> <constant name="struts.ui.theme" value="simple"/> </struts> <s:radio name="list" list="{'Java','.Net','Php','Ror'}" value="{'.Net'}" /> <s:checkboxlist name="list" list="{'Java','.Net','Php','Ror'}" value="{'Java','.Net'}" />


防止表單的重復提交:

1)登錄界面index.jsp中的代碼:

<s:form action="hello" namespace="/test" method="post"> 姓名:<s:textfield name="name" /> <s:token /> <input type="submit" value="發送" /> </s:form>

2)struts.xml文件中的代碼:

<package name="base" namespace="/test" extends="struts-default"> <action name="hello" class="struts2.personAction"> <!-- 加入攔截器,當再一次訪問已經訪問到的頁面時,會跳轉到登陸頁面 --> <interceptor-ref name="defaultStack" /> <interceptor-ref name="token" /> <result name="invalid.token">/index.jsp</result> <result name="success">/show.jsp</result> </action> </package> </struts>

3)personAction中的代碼:

public class personAction { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String execute(){ return "success"; } }

4)顯示層show.jsp中的代碼:

<body> <s:property value="name" /> <br /><%=new Date()%> <br> </body>

注意:以上配置了“token”攔截器和“invalid.token”結果,因為“token”攔截器在會話的token與請求的token不一致時,將會直接返回“invalid.token”結果。













生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 成人免播放器午夜视频 | 欧美性free xxx | 波多野结衣欧美 | 国产成人综合久久精品红 | 久久一区二区三区四区 | 一级毛片一级毛片a毛片欧美 | 欧美特黄一级aa毛片 | 国产三级短视频 | 伊人a.v在线| 精品国产午夜久久久久九九 | 白浆都出来了视频国产精品 | 日本护士做xxxxxhd | 亚洲最大在线观看 | 欧美理论在线 | 欧美最猛性xxxxx69交 | 亚洲性综合网 | 精品国产日韩亚洲一区在线 | 欧美人与性动交α欧美精品 | 日韩欧美在线观看视频一区二区 | 五月国产综合视频在线观看 | 欧美色成人 | 欧美福利二区 | 欧美黑人性猛交 | 精品视频久久久久 | 中文版在线乱码在线看 | 国产精品亚洲综合五月天 | 中文字幕第一页在线 | 在线观看ww | 欧美xxxvideo| 国产一区二区三区免费播放 | 国产乱码一区二区三区 | 日本不卡视频一区二区 | 涩涩片影院 | 一二三四日本手机高清视频 | 91人人爱 | 欧美整片在线观看 | 国产成人精品久久一区二区小说 | 国内精品综合九九久久精品 | 在线观看视频一区二区 | 自拍一区在线观看 | 成人xxxxx|