Struts2 OGNL表達(dá)式實(shí)例詳解
Object Graph Navigation Language:對(duì)象圖導(dǎo)航語言,就是用點(diǎn)來訪問成員變量
<s:property value="cat.name"/>
例1:
struts.xml:
<package name="ognl" namespace="/ognl" extends="struts-default"> <action name="og1" class="cn.edu.hpu.action.OgnlAction1"> <result>/ognl.jsp</result> </action> </package>
OgnlAction1.java:
package cn.edu.hpu.action; import com.opensymphony.xwork2.ActionSupport; public class OgnlAction1 extends ActionSupport{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return super.execute(); } }
訪問鏈接:
<a href="<%=basePath%>ognl/og1?username=jack&&password=111" rel="external nofollow" >OGNL</a><br/>
結(jié)果界面:
OGNL SUCCESS!!<br/> <ol> <li>訪問值棧中的action的普通屬性1=<s:property value="username"/></li> <li>訪問值棧中的action的普通屬性2=<s:property value="password"/></li> </ol> <s:debug></s:debug>
結(jié)果顯示:
OGNL SUCCESS!!
訪問值棧中的action的普通屬性1=jack
訪問值棧中的action的普通屬性2=111
[Debug]
ps:點(diǎn)擊[Debug]可以查看到棧值中有username與password
例2:
struts.xml:
<package name="ognl" namespace="/ognl" extends="struts-default"> <action name="user2" class="cn.edu.hpu.action.UserAction2" method="add"> <result name="success">/ognl.jsp</result> </action> </package>
UserAction2.java:
package cn.edu.hpu.action; import cn.edu.hpu.mode.User; public class UserAction2 { private User user; public String add(){ System.out.println("name="+user.getName()); System.out.println("age="+user.getAge()); return "success"; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
User.java:
package cn.edu.hpu.mode; public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
鏈接:
訪問User屬性
<a href="<%=basePath%>ognl/user2?user.name=tom&&user.age=21" rel="external nofollow" >OGNL2</a><br/>
(只有你傳user.XXXX才能構(gòu)造)
結(jié)果頁面:
<%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>" rel="external nofollow" > <title>My JSP 'ognl.jsp' starting page</title> </head> <body> OGNL SUCCESS!!<br/> <ol> <li>訪問值棧中對(duì)象的普通屬性(get set 方法 ): <br/> user-age:<s:property value="user.age"/>|<s:property value="user['age']"/></li> </ol> <s:debug></s:debug> </body> </html>
顯示結(jié)果:
OGNL SUCCESS!!
訪問值棧中對(duì)象的普通屬性(get set 方法 ):
user-age:21|21
[Debug]
點(diǎn)擊[Debug]可以查看到棧值中有user對(duì)象的存在
例3:
struts.xml
<package name="ognl" namespace="/ognl" extends="struts-default"> <action name="cat1" class="cn.edu.hpu.ognl.OgnlAction2"> <result name="success">/ognl.jsp</result> </action> </package>
OgnlAction2.java:
package cn.edu.hpu.ognl; import cn.edu.hpu.mode.Cat; import com.opensymphony.xwork2.ActionSupport; public class OgnlAction2 extends ActionSupport{ private Cat cat; public Cat getCat() { return cat; } public void setCat(Cat cat) { this.cat = cat; } public String execute(){ return "success"; } public String m(){ return "Hello"; } }
Cat.java:
package cn.edu.hpu.mode; public class Cat { private Dog friend; public Dog getFriend() { return friend; } public void setFriend(Dog friend) { this.friend = friend; } public String miaomiao(){ return "miaomiao"; } }
Dog.java:
package cn.edu.hpu.mode; public class Dog { private String name; public Dog(){ } public Dog(String name){ super(); this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { // TODO Auto-generated method stub return "dog:"+name; } }
鏈接:
訪問Cat屬性
<a href="<%=basePath%>ognl/cat1?cat.friend.name=littleBoy" rel="external nofollow" >OGNL3</a><br/>
結(jié)果頁面:
<li>訪問值棧中對(duì)象的普通屬性(get set 方法 ): <br/> cat-friend-name:<s:property value="cat.friend.name"/></li>
結(jié)果:
訪問值棧中對(duì)象的普通屬性(get set 方法 ):
cat-friend-name:littleBoy
觀察[Debug],發(fā)現(xiàn)只有cat在值棧中,說明通過cat聯(lián)系到dog,取得dog中的屬性
訪問cat方法:
<a href="<%=basePath%>ognl/cat1" rel="external nofollow" rel="external nofollow" >OGNL4</a><br/>
結(jié)果頁面:
<li>訪問值棧中對(duì)象的普通方法: <br/> cat-miaomiao:<s:property value="cat.miaomiao()"/></li>
結(jié)果:
訪問值棧中對(duì)象的普通屬性:
cat-miaomiao:miaomiao
訪問action的普通方法:
<a href="<%=basePath%>ognl/cat1" rel="external nofollow" rel="external nofollow" >OGNL5</a><br/>
結(jié)果頁面:
<li>訪問值棧中action的普通方法: <br/> action-m():<s:property value="m()"/></li>
結(jié)果:
訪問值棧中acion的普通方法:
action-m():Hello
總結(jié)
以上就是本文關(guān)于Struts2 OGNL表達(dá)式實(shí)例詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。有什么問題可以隨時(shí)留言,歡迎大家交流討論。
相關(guān)文章
Spring Security 密碼驗(yàn)證動(dòng)態(tài)加鹽的驗(yàn)證處理方法
小編最近在改造項(xiàng)目,需要將gateway整合security在一起進(jìn)行認(rèn)證和鑒權(quán),今天小編給大家分享Spring Security 密碼驗(yàn)證動(dòng)態(tài)加鹽的驗(yàn)證處理方法,感興趣的朋友一起看看吧2021-06-06解決CollectionUtils.isNotEmpty()不存在的問題
這篇文章主要介紹了解決CollectionUtils.isNotEmpty()不存在的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java實(shí)現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法
這篇文章主要介紹了Java實(shí)現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法,本文包含運(yùn)算結(jié)果和實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09Spring中使用事務(wù)嵌套時(shí)需要警惕的問題分享
最近項(xiàng)目上有一個(gè)使用事務(wù)相對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景報(bào)錯(cuò)了。在絕大多數(shù)情況下,都是風(fēng)平浪靜,沒有問題。其實(shí)內(nèi)在暗流涌動(dòng),在有些異常情況下就會(huì)報(bào)錯(cuò),這種偶然性的問題很有可能就會(huì)在暴露到生產(chǎn)上造成事故,那究竟是怎么回事呢?本文就來簡(jiǎn)單講講2023-04-04簡(jiǎn)單了解synchronized和lock的區(qū)別
這篇文章主要介紹了簡(jiǎn)單了解synchronized和lock的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Javaweb使用cors完成跨域ajax數(shù)據(jù)交互
本文由跨域、cors的概念開始,進(jìn)而向大家介紹了Javaweb使用cors完成跨域ajax數(shù)據(jù)交互的相關(guān)內(nèi)容,需要的朋友可以了解下。2017-09-09