服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - Struts2 OGNL表达式实例详解

Struts2 OGNL表达式实例详解

2021-01-11 14:28光仔December JAVA教程

这篇文章主要介绍了Struts2 OGNL表达式实例详解,相关实例代码,需要的朋友可以参考。

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

?
1
<s:property value="cat.name"/>

 

例1:

struts.xml:

?
1
2
3
4
5
<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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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();
  }
}

访问链接:

?
1
<a href="<%=basePath%>ognl/og1?username=jack&&password=111" rel="external nofollow" >OGNL</a><br/>

结果界面:

?
1
2
3
4
5
6
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:

?
1
2
3
4
5
<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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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属性

?
1
<a href="<%=basePath%>ognl/user2?user.name=tom&&user.age=21" rel="external nofollow" >OGNL2</a><br/>

(只有你传user.XXXX才能构造)

结果页面:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@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

?
1
2
3
4
5
<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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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属性

?
1
<a href="<%=basePath%>ognl/cat1?cat.friend.name=littleBoy" rel="external nofollow" >OGNL3</a><br/>

结果页面:

?
1
2
3
<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方法:

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

结果页面:

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

结果:

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

cat-miaomiao:miaomiao

访问action的普通方法:

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

结果页面:

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

结果:

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

action-m():Hello

总结

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

原文链接:http://blog.csdn.net/acmman/article/details/47069953

延伸 · 阅读

精彩推荐
  • JAVA教程shade解决mybatis包冲突问题及项目引用的方法

    shade解决mybatis包冲突问题及项目引用的方法

    这篇文章主要介绍了shade解决mybatis包冲突问题及项目引用的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    张占岭3452020-08-04
  • JAVA教程Java从数据库中读取Blob对象图片并显示的方法

    Java从数据库中读取Blob对象图片并显示的方法

    这篇文章主要介绍了Java从数据库中读取Blob对象图片并显示的方法,实例分析了Java读取数据库中Blob对象图片的技巧与操作方法,需要的朋友可以参考下 ...

    Benjamin_whx7192019-12-09
  • JAVA教程JAVA通过XPath解析XML性能比较详解

    JAVA通过XPath解析XML性能比较详解

    本篇文章主要介绍了JAVA通过XPath解析XML性能比较详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    王中秋2442020-08-12
  • JAVA教程Java用户登录验证代码

    Java用户登录验证代码

    本文给大家使用java代码实现用户登录验证功能,当用户输入三次错误后,用户不可以再次登录的。具体实现代码,大家可以参考下本教程 ...

    xbyk3752020-06-07
  • JAVA教程Java枚举类型enum的详解及使用

    Java枚举类型enum的详解及使用

    这篇文章主要介绍了Java枚举类型enum的详解及使用的相关资料,需要的朋友可以参考下...

    qq_378105942472020-10-22
  • JAVA教程java接口Array介绍

    java接口Array介绍

    这篇文章主要介绍了java接口Array的相关资料,需要的朋友可以参考下 ...

    hebedich4132019-12-03
  • JAVA教程Java性能调优概述

    Java性能调优概述

    本文介绍了Java程序性能的主要表现点、衡量程序性能的主要指标、性能调优的层次、基本调优策略和手段等,具有很好的参考价值,下面跟着小编一起来看...

    九朗的码农生活4572020-08-03
  • JAVA教程浅析Java编程中类和对象的定义

    浅析Java编程中类和对象的定义

    下面小编就为大家带来一篇浅析Java编程中类和对象的定义。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游...

    jingxian4662020-04-28