Struts2 OGNL表达式实例详解

发布时间 - 2026-01-11 03:26:43    点击率:

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表达式实例详解的全部内容,希望对大家有所帮助。有什么问题可以随时留言,欢迎大家交流讨论。


# struts  # ognl  # struts2  # 的ognl表达式  # Struts2 通过ognl表达式实现投影  # 详解Struts2动态方法调用  # Struts2修改上传文件大小限制方法解析  # AjaxFileUpload+Struts2实现多文件上传功能  # struts2开发流程及详细配置  # struts+spring+hibernate三个框架的整合  # Struts2获取参数的三种方法总结  # 中有  # 可以查看  # 有什么  # 欢迎大家  # 可以随时  # 来访问  # Exception  # throws  # Override  # execute  # generated  # method  # TODO  # Auto  # getUsername  # return  # username  # password  # getPassword  # setPassword 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  如何在万网ECS上快速搭建专属网站?  装修招标网站设计制作流程,装修招标流程?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何在服务器上配置二级域名建站?  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel中的Facade(门面)到底是什么原理  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何在景安服务器上快速搭建个人网站?  如何在Windows服务器上快速搭建网站?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  高端建站如何打造兼具美学与转化的品牌官网?  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel如何使用Collections进行数据处理?(实用方法示例)  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  如何在云服务器上快速搭建个人网站?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  java获取注册ip实例  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  如何安全更换建站之星模板并保留数据?  如何快速查询网站的真实建站时间?  中山网站推广排名,中山信息港登录入口?  JavaScript中的标签模板是什么_它如何扩展字符串功能  Bootstrap整体框架之JavaScript插件架构  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  JS弹性运动实现方法分析  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  免费视频制作网站,更新又快又好的免费电影网站?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  香港服务器租用每月最低只需15元?  如何在企业微信快速生成手机电脑官网?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  android nfc常用标签读取总结  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  高端网站建设与定制开发一站式解决方案 中企动力  Python企业级消息系统教程_KafkaRabbitMQ高并发应用