Struts2 OGNL表达式实例详解

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

(0)

相关推荐

  • Struts2 通过ognl表达式实现投影

    projection(投影):俗话说就是过滤,就是过滤器把符合条件的过滤出来 struts.xml: <package name="ognl" namespace="/ognl" extends="struts-default"> <action name="pro" class="cn.edu.hpu.ognl.OgnlAction4"> <result name="

  • struts+spring+hibernate三个框架的整合

    准备三个框架结合的lib包 Spring3结合Struts2的步骤如下: 1:开启Struts2结合Spring3,在struts.xml中添加如下语句: java代码: <constant name="struts.objectFactory" value="spring"/> 2:在web.xml中添加listener,如下: java代码: <listener> <listener-class> org.springfram

  • AjaxFileUpload+Struts2实现多文件上传功能

    本文重点给大家介绍AjaxFileUpload+Struts2实现多文件上传功能,具体实现代码大家参考下本文. 单文件和多文件的实现区别主要修改两点, 一是插件ajaxfileupload.js里接收file文件ID的方式 二是后台action是数组形式接收 1.ajaxFileUpload文件下载地址http://www.phpletter.com/Demo/AjaxFileUpload-Demo/ 2.引入jquery-1.8.0.min.js.ajaxFileUpload.js文件 3.文

  • Struts2获取参数的三种方法总结

    Struts2获取参数的三种方法总结 前言: Struts2不在建议我们使用原生的servletAPI来获取参数,这样做的目的是事项Struts2的action与servlet进行解耦,可以在日后更加方便的对action类进行测试. Struts2获取参数的三种办法: (1)属性驱动方式 (2)模型驱动方式 (3)对象驱动方式 one by one 属性驱动方式 /* * 参数获取方式之属性驱动方式 */ public class TestAction extends ActionSupport

  • 详解Struts2动态方法调用

    动态方法就是一个Action对应多个请求,减少Action的数量 1.指定method属性 <action name="addAction" method="add" class="com.venn.action.HelloWorldAction"> <result>/jsp/add.jsp</result> </action> 2.感叹号(!)方式(不推荐使用) <action name=&

  • Struts2修改上传文件大小限制方法解析

    首先struts上传最大大小由两个地方决定.  · struts.multipart.maxSize决定整个post的form最大是多大,所以这个限制是最初的.默认大小是接近2M,在struts的default.properties中定义.  · fileuploadInterceptor中可以定义maximumSize最大文件大小. 最初定义在struts.xml中定义了没有生效,后来发现在工程中的struts.properties中已经设置过,所以后来被覆盖了,更改struts.proper

  • struts2开发流程及详细配置

    一:Struts开发步骤: 1. web项目,引入struts - jar包 2. web.xml中,引入struts的核心功能 配置过滤器 3. 开发action 4. 配置action src/struts.xml 二:详细配置    1.引入8个jar文件 commons-fileupload-1.2.2.jar   [文件上传相关包] commons-io-2.0.1.jar struts2-core-2.3.4.1.jar           [struts2核心功能包] xwork-

  • Struts2 OGNL表达式实例详解

    Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量 <s:property value="cat.name"/> 例1: struts.xml: <package name="ognl" namespace="/ognl" extends="struts-default"> <action name="og1" class=

  • Java8 新特性Lambda表达式实例详解

    Java8 新特性Lambda表达式实例详解 在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口): public interface OnClickListener { void onClick(View v); } 我们是这样使用它的: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.setText("

  • Javaweb El表达式实例详解

    EL全称 Expression Language(表达式语言),是jsp2.0最重要的特性之一,可以利用EL表达式来访问应用程序中的数据,来消除jsp页面中的java脚本. el表达式的语法 expression例如x+y可以写成{x+y} el中的关键字 以下是el中的关键字,他们不能用做标识符: and,eq,gt,true,instanceof,or,ne,le,false,empty,not,lt,ge,null,div,mod 一.EL表达式简介 EL 全名为Expression La

  • python实现逆波兰计算表达式实例详解

    本文实例讲述了python实现逆波兰计算表达式的方法.分享给大家供大家参考.具体分析如下: 逆波兰表达式又叫做后缀表达式.在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示.波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法.按此方法,每一运算符都置于其运算对象之后,故称为后缀表示. # -*- coding: utf-8 -*- symbol_priority = {} symbol_priority[0] = ['#']

  • Struts2中实现web应用的初始化实例详解

    Struts2中实现web应用的初始化实例详解 在JavsSE中,main方法为应用提供了入口,而在Android中,我们可以使用Application对于整个应用的生命周期进行管理,那么在基于Struts2的JavaEE应用中,如何实现类似的功能呢. 其中一种比较好的方式,是通过实现ServletContextListener接口进行坚挺,重写contextInitialized方法,实现自己需要进行的初始化操作,之后在web.xml中添加相应的listner,tomcat在启动服务时会调用相

  • Java 8 lambda表达式引入详解及实例

    Java 8 lambda表达式引入详解及实例 eclipse 下载安装 Help -> EclipseMarketplace -> 搜索Java 8 Kepler ->Java 8 support for eclipse Kepler SR2 安装完成后需要重启 Android Studio 在project的build.gradle文件中添加 buildscript { dependencies { classpath 'me.tatarka:gradle-retrolambda:3

  • Android 中Lambda表达式的使用实例详解

     Android 中Lambda表达式的使用实例详解 Java8 中着实引入了一些非常有特色的功能,如Lambda表达式.streamAPI.接口默认实现等等.Lambda表达式在 Android 中最低兼容到 Android2.3 系统,兼容性还是不错的,Lambda表达式本质上是一种匿名方法,它既没有方法名,也没有访问修饰符和返回值类型,使用它编写的代码将更加简洁易读. 1.Lambda表达式的基本写法 如果想要在 Android 项目中使用 Lambda表达式 或者 Java8 的其他新特

  • Spring 整合Shiro 并扩展使用EL表达式的实例详解

    Shiro是一个轻量级的权限控制框架,应用非常广泛.本文的重点是介绍Spring整合Shiro,并通过扩展使用Spring的EL表达式,使@RequiresRoles等支持动态的参数.对Shiro的介绍则不在本文的讨论范围之内,读者如果有对shiro不是很了解的,可以通过其官方网站了解相应的信息.infoq上也有一篇文章对shiro介绍比较全面的,也是官方推荐的,其地址是https://www.infoq.com/articles/apache-shiro. Shiro整合Spring 首先需要

  • C++实例详解lambda表达式的使用

    目录 lambda表达式 1.lambda表达式语法 2.lambda应用 3.lambda表达式的应用实践 1.计算器案例 2.智能指针案例 3.优先级队列 lambda表达式 C++11 函数对象的升级版 => lambda表达式 函数对象的缺点:(需要定义一个类) 函数对象使用在 泛型算法参数传递 比较性质/自定义操作 优先级队列 智能指针(自定义智能指针的删除器) lambda表达式原理: 就是函数对象更高级的实现! 1.lambda表达式语法 例1: lambda表达式对应函数对象小括

  • MyBatis 动态SQL和缓存机制实例详解

    有的时候需要根据要查询的参数动态的拼接SQL语句 常用标签: - if:字符判断 - choose[when...otherwise]:分支选择 - trim[where,set]:字符串截取,其中where标签封装查询条件,set标签封装修改条件 - foreach: if案例 1)在EmployeeMapper接口文件添加一个方法 public Student getStudent(Student student); 2)如果要写下列的SQL语句,只要是不为空,就作为查询条件,如下所示,这样

随机推荐