Struts2 OGNL表達(dá)式實(shí)例詳解
Object Graph Navigation Language:對(duì)象圖導(dǎo)航語(yǔ)言,就是用點(diǎn)來(lái)訪問(wè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();
}
}
訪問(wèn)鏈接:
<a href="<%=basePath%>ognl/og1?username=jack&&password=111" rel="external nofollow" >OGNL</a><br/>
結(jié)果界面:
OGNL SUCCESS!!<br/>
<ol>
<li>訪問(wèn)值棧中的action的普通屬性1=<s:property value="username"/></li>
<li>訪問(wèn)值棧中的action的普通屬性2=<s:property value="password"/></li>
</ol>
<s:debug></s:debug>
結(jié)果顯示:
OGNL SUCCESS!!
訪問(wèn)值棧中的action的普通屬性1=jack
訪問(wèn)值棧中的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;
}
}
鏈接:
訪問(wèn)User屬性
<a href="<%=basePath%>ognl/user2?user.name=tom&&user.age=21" rel="external nofollow" >OGNL2</a><br/>
(只有你傳user.XXXX才能構(gòu)造)
結(jié)果頁(yè)面:
<%@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>訪問(wèn)值棧中對(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!!
訪問(wèn)值棧中對(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;
}
}
鏈接:
訪問(wèn)Cat屬性
<a href="<%=basePath%>ognl/cat1?cat.friend.name=littleBoy" rel="external nofollow" >OGNL3</a><br/>
結(jié)果頁(yè)面:
<li>訪問(wèn)值棧中對(duì)象的普通屬性(get set 方法 ):
<br/>
cat-friend-name:<s:property value="cat.friend.name"/></li>
結(jié)果:
訪問(wèn)值棧中對(duì)象的普通屬性(get set 方法 ):
cat-friend-name:littleBoy
觀察[Debug],發(fā)現(xiàn)只有cat在值棧中,說(shuō)明通過(guò)cat聯(lián)系到dog,取得dog中的屬性
訪問(wèn)cat方法:
<a href="<%=basePath%>ognl/cat1" rel="external nofollow" rel="external nofollow" >OGNL4</a><br/>
結(jié)果頁(yè)面:
<li>訪問(wèn)值棧中對(duì)象的普通方法:
<br/>
cat-miaomiao:<s:property value="cat.miaomiao()"/></li>
結(jié)果:
訪問(wèn)值棧中對(duì)象的普通屬性:
cat-miaomiao:miaomiao
訪問(wèn)action的普通方法:
<a href="<%=basePath%>ognl/cat1" rel="external nofollow" rel="external nofollow" >OGNL5</a><br/>
結(jié)果頁(yè)面:
<li>訪問(wèn)值棧中action的普通方法:
<br/>
action-m():<s:property value="m()"/></li>
結(jié)果:
訪問(wèn)值棧中acion的普通方法:
action-m():Hello
總結(jié)
以上就是本文關(guān)于Struts2 OGNL表達(dá)式實(shí)例詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。有什么問(wèn)題可以隨時(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()不存在的問(wèn)題
這篇文章主要介紹了解決CollectionUtils.isNotEmpty()不存在的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java實(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-09
Javaweb使用getPart接收表單文件過(guò)程解析
這篇文章主要介紹了Javaweb使用getPart接收表單文件過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Spring中使用事務(wù)嵌套時(shí)需要警惕的問(wèn)題分享
最近項(xiàng)目上有一個(gè)使用事務(wù)相對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景報(bào)錯(cuò)了。在絕大多數(shù)情況下,都是風(fēng)平浪靜,沒(méi)有問(wèn)題。其實(shí)內(nèi)在暗流涌動(dòng),在有些異常情況下就會(huì)報(bào)錯(cuò),這種偶然性的問(wèn)題很有可能就會(huì)在暴露到生產(chǎn)上造成事故,那究竟是怎么回事呢?本文就來(lái)簡(jiǎn)單講講2023-04-04
簡(jiǎn)單了解synchronized和lock的區(qū)別
這篇文章主要介紹了簡(jiǎn)單了解synchronized和lock的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Javaweb使用cors完成跨域ajax數(shù)據(jù)交互
本文由跨域、cors的概念開(kāi)始,進(jìn)而向大家介紹了Javaweb使用cors完成跨域ajax數(shù)據(jù)交互的相關(guān)內(nèi)容,需要的朋友可以了解下。2017-09-09

