Struts2 OGNL表达式实例详解

 更新时间:2017年09月27日 14:53:23   作者:光仔December  
这篇文章主要介绍了Struts2 OGNL表达式实例详解,相关实例代码,需要的朋友可以参考。
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量

<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/> 

结果界面:

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> 

结果显示:

OGNL SUCCESS!!

访问值栈中的action的普通属性1=jack

访问值栈中的action的普通属性2=111

[Debug]
ps:点击[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才能构造)

结果页面:

<%@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>访问值栈中对象的普通属性(get set 方法 ): 
    <br/> 
 user-age:<s:property value="user.age"/>|<s:property value="user['age']"/></li> 
  </ol> 
  <s:debug></s:debug> 
 </body> 
</html> 

显示结果:

OGNL SUCCESS!!

访问值栈中对象的普通属性(get set 方法 ):

user-age:21|21

[Debug]

点击[Debug]可以查看到栈值中有user对象的存在

例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/>

结果页面:

<li>访问值栈中对象的普通属性(get set 方法 ): 
    <br/> 
    cat-friend-name:<s:property value="cat.friend.name"/></li> 

结果:

访问值栈中对象的普通属性(get set 方法 ):

cat-friend-name:littleBoy

观察[Debug],发现只有cat在值栈中,说明通过cat联系到dog,取得dog中的属性

访问cat方法:

<a href="<%=basePath%>ognl/cat1" rel="external nofollow" rel="external nofollow" >OGNL4</a><br/>

结果页面:

<li>访问值栈中对象的普通方法: 
    <br/> 
    cat-miaomiao:<s:property value="cat.miaomiao()"/></li> 

结果:

访问值栈中对象的普通属性:

cat-miaomiao:miaomiao

访问action的普通方法:

<a href="<%=basePath%>ognl/cat1" rel="external nofollow" rel="external nofollow" >OGNL5</a><br/> 

结果页面:

<li>访问值栈中action的普通方法: 
    <br/> 
    action-m():<s:property value="m()"/></li> 

结果:

访问值栈中acion的普通方法:

action-m():Hello

总结

以上就是本文关于Struts2 OGNL表达式实例详解的全部内容,希望对大家有所帮助。有什么问题可以随时留言,欢迎大家交流讨论。

相关文章

  • Java应用开源框架实现简易web搜索引擎

    Java应用开源框架实现简易web搜索引擎

    本篇文章主要介绍了Java应用开源框架实现简易web搜索引擎,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • java二分查找插入法

    java二分查找插入法

    当你需要构建一个大的有序队列,用插入发太慢了,可以先用二分查找法,找到在队列要插入的位置,把数后移一下,然后放进去。比较效率,下面是java使用示例,需要的朋友可以参考下
    2014-03-03
  • JAVA构造器是否为静态方法你知道吗

    JAVA构造器是否为静态方法你知道吗

    这篇文章主要为大家详细介绍了JAVA构造器是否为静态方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Java日常练习题,每天进步一点点(26)

    Java日常练习题,每天进步一点点(26)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java中synchronized的四种用法详解

    Java中synchronized的四种用法详解

    这篇文章主要介绍了Java中synchronized的四种用法详解,当我们处理多线程处理同步问题的时候就会用到synchronized这个关键字,下面介绍下synchronized的四种用法,需要的朋友可以参考下
    2024-01-01
  • Spring中IOC和AOP的核心组成架构详解

    Spring中IOC和AOP的核心组成架构详解

    这篇文章主要介绍了Spring中IOC和AOP的核心组成架构详解,本文是对Spring的2大核心功能——IoC和AOP 的总结提炼,并增加了环境profile和条件化bean的内容,篇幅较短,更像是一个大纲,或者思维导图,需要的朋友可以参考下
    2023-08-08
  • SprinBoot如何集成参数校验Validator及参数校验的高阶技巧

    SprinBoot如何集成参数校验Validator及参数校验的高阶技巧

    这篇文章主要介绍了SprinBoot如何集成参数校验Validator及参数校验的高阶技巧包括自定义校验、分组校验,本文分步骤给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • SpringBoot thymeleaf的使用方法解析

    SpringBoot thymeleaf的使用方法解析

    这篇文章主要介绍了SpringBoot thymeleaf的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • maven加入spring框架的详细教程

    maven加入spring框架的详细教程

    这篇文章主要介绍了maven加入spring框架的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Java多线程编程安全退出线程方法介绍

    Java多线程编程安全退出线程方法介绍

    这篇文章主要介绍了Java多线程编程安全退出线程方法介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10

最新评论

?


http://www.vxiaotou.com