`
zds420
  • 浏览: 203745 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Struts2 OGNL

 
阅读更多

Struts2  OGNL

 

 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。

 

 

实战

 

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    OGNL:object graph navigation language<br/>
    <a href="/ognl.action?ip=100.22.33.22&uv=100&pv=50&user_model.school=1111222&bbs_model.tites_model.author=author">OGNL访问</a>
  《备注:OGNL 只有传递参数的时候才构造对象传递参数值或者使用domain model的时候可以自己new》
  </body>
</html>

 

struts.xml

	<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
	<package name="default" namespace="/" extends="struts-default">
		<action name="ognl" class="com.struts2.action.OGNLController">
			<result>/ognl.jsp</result>
		</action>
	</package>

 

OGNLController.java

 

package com.struts2.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.opensymphony.xwork2.ActionSupport;
import com.summary.model.BBSModel;
import com.summary.model.UserModel;

public class OGNLController extends ActionSupport {
	
	private String ip;
	
	private String uv;
	
	private String pv;
	
	private UserModel user_model;
	
	private BBSModel bbs_model;
	
	private List dataList = new ArrayList();
	
	private Set dataSet =new HashSet();
	
	private Map<String, String> dataMap = new HashMap();
	
	private List<UserModel> dataInfoList ;	//在页面中获取不到对象的值,需要查看对象是否设置了set,get方法
	
	public String execute() {
		
		dataList.add("list_001");
		dataList.add("list_002");
		dataList.add("list_003");
		dataList.add("list_004");
		dataList.add("list_005");
		dataList.add("list_006");
		dataList.add("list_007");
		dataList.add("list_008");
		
		dataSet.add("set_001");
		dataSet.add("set_002");
		dataSet.add("set_003");
		dataSet.add("set_004");
		dataSet.add("set_005");
		dataSet.add("set_006");
		dataSet.add("set_007");
		dataSet.add("set_008");
		
		dataMap.put("data_key_001", "data_value_001");
		dataMap.put("data_key_002", "data_value_002");
		dataMap.put("data_key_003", "data_value_003");
		dataMap.put("data_key_004", "data_value_004");
		dataMap.put("data_key_005", "data_value_005");
		dataMap.put("data_key_006", "data_value_006");
		
		dataInfoList = new ArrayList<UserModel>();
		UserModel userModel1 = new UserModel();
		userModel1.setUser_name("user_name_01");
		userModel1.setSchool("用户的学校");
		userModel1.setRemark("备注user_name_01");
		userModel1.setPassword("密码用户名称01");
		userModel1.setAge(15);
		dataInfoList.add(userModel1);
		
		UserModel userModel2 = new UserModel();
		userModel2.setUser_name("user_name_02");
		userModel2.setSchool("用户的学校02");
		userModel2.setRemark("备注user_name_02");
		userModel2.setPassword("密码用户名称02");
		userModel2.setAge(33);
		dataInfoList.add(userModel2);
		
		UserModel userModel3 = new UserModel();
		userModel3.setUser_name("user_name_032");
		userModel3.setSchool("用户的学校03");
		userModel3.setRemark("备注user_name_03");
		userModel3.setPassword("密码用户名称03");
		userModel3.setAge(2);
		dataInfoList.add(userModel3);
		
		UserModel userModel4 = new UserModel();
		userModel4.setUser_name("user_name_04");
		userModel4.setSchool("用户的学校04");
		userModel4.setRemark("备注user_name_04");
		userModel4.setPassword("密码用户名称04");
		userModel4.setAge(22);
		dataInfoList.add(userModel4);
		return SUCCESS;
	}
	
	public String test() {
		return "访问Action值栈中的普通方法";
	}
	
	
	
	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public String getUv() {
		return uv;
	}

	public void setUv(String uv) {
		this.uv = uv;
	}

	public String getPv() {
		return pv;
	}

	public void setPv(String pv) {
		this.pv = pv;
	}

	public UserModel getUser_model() {
		return user_model;
	}

	public void setUser_model(UserModel user_model) {
		this.user_model = user_model;
	}

	public BBSModel getBbs_model() {
		return bbs_model;
	}

	public void setBbs_model(BBSModel bbs_model) {
		this.bbs_model = bbs_model;
	}

	public List getDataList() {
		return dataList;
	}

	public void setDataList(List dataList) {
		this.dataList = dataList;
	}

	public Set getDataSet() {
		return dataSet;
	}

	public void setDataSet(Set dataSet) {
		this.dataSet = dataSet;
	}

	public Map<String, String> getDataMap() {
		return dataMap;
	}

	public void setDataMap(Map<String, String> dataMap) {
		this.dataMap = dataMap;
	}

	public List<UserModel> getDataInfoList() {
		return dataInfoList;
	}

	public void setDataInfoList(List<UserModel> dataInfoList) {
		this.dataInfoList = dataInfoList;
	}
}

 

 

StaticController.java

package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class StaticController {
	
	public static String CONFIG="配置文件";
	
	public StaticController() {
		System.out.println("xxxxxxxxxxxxxx");
	}
	
	public static  String getStaticMethod() {
		return "访问静态方法";
	}

	public static String getCONFIG() {
		return CONFIG;
	}

	public static void setCONFIG(String config) {
		CONFIG = config;
	}
}

 

BBSModel.java

 

package com.summary.model;

public class BBSModel {
	private String title;
	
	private TitesModel tites_model;
	
	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public TitesModel getTites_model() {
		return tites_model;
	}

	public void setTites_model(TitesModel tites_model) {
		this.tites_model = tites_model;
	}
	
	
}

 

TitesModel.java

 

package com.summary.model;

public class TitesModel {
	
	private String author="朱诞生";
	private String content="帖子内容";
	private String times="2011-12-04";
	private String reply_to="暂时无人回复";
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getTimes() {
		return times;
	}
	public void setTimes(String times) {
		this.times = times;
	}
	public String getReply_to() {
		return reply_to;
	}
	public void setReply_to(String reply_to) {
		this.reply_to = reply_to;
	}
}
 

   UserModel.java

package com.summary.model;

public class UserModel {
	private String user_name="";
	private String password="";
	private String school="";
	private String remark="";
	private int age;
	private String add_date;
	
	
	public String getUser_name() {
		return user_name;
	}
	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}
	public String getPassword() {
		return password;
	} 
	public void setPassword(String password) {
		this.password = password;
	}
	public String getSchool() {
		return school;
	}
	public void setSchool(String school) {
		this.school = school;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	
	
	public String getData() {
		return "访问值栈中对象的普通方法";
	}
	 
	public String getAdd_date() {
		return add_date;
	}
	public void setAdd_date(String add_date) {
		this.add_date = add_date;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
 

 

 

 

 

 

OGNL: 对象图导航语言

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'ognl.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  对象图导航语言<br/>
  
  OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。

  
  <br/>
  	值栈普通属性和普通方法:<br/>
    1:访问ACTION值栈中的普通属性 : ip=<s:property value="ip"/><br/>
    2:访问值栈中对象的普通属性 : UserModel.school=<s:property value="user_model.school"/><br/>
    3:访问值栈中对象的普通属性 (set,get 方法): BBSModel.TitesModel.author=<s:property value="bbs_model.tites_model.author"/>   《备注:OGNL 只有传递参数的时候才构造对象传递参数值》<br/>
    4:访问值栈中对象的普通方法 :length()= <s:property value="ip.length()"/>   | substring()=<s:property value="ip.substring(0,5)"/> <br/>
    5:访问值栈中对象的普通方法  : <s:property value="test()"/>   |  <s:property value="user_model.getData()"/> <br/>
    <hr/>
    值栈中静态属性和方法:使用@包名@类名 <br/>
    1:访问静态属性:<s:property  value="@com.struts2.action.StaticController@CONFIG"/><br/>
    2:访问静态方法:<s:property  value="@com.struts2.action.StaticController@getStaticMethod()"/><br/>
    3:访问构造方法:<s:property  value="new com.struts2.action.StaticController()"/><br/>
    <hr/>
   
    访问数组和集合
   <br/>
   1:获取List数据:<s:property value="dataList"/> <br/>
   2:获取List中的一个元素(数组和集合是一样的访问小标都是从0切使用中括号[]):<s:property value="dataList[4]"/><br/>
   3:获取Set数据:<s:property value="dataSet"/><br/>
   4:获取Set中的莫一个元素(Set是无序,且不能使用下标获取):<s:property value="dataSet[3]"/><br/>
   5:获取Map数据: <s:property value="dataMap"/><br/>
   6:获取Map的所有键:<s:property value="dataMap.keys"/><br/>
   7:获取Map的所有值:<s:property value="dataMap.values"/><br/>
   8:获取Map中的莫一个元素(使用类似于数组小标获取List的内容):<s:property value="dataMap['data_key_005']"/><br/>
   9:获取List的大小<s:property value="dataList.size()"/><br/>
   <hr/>
   访问集合 – 投影、选择(? ^ $)
     <br/>
     1:选择获取年龄18岁以上的集合: <s:property value="dataInfoList.{?#this.age>=18}"/><br/>
 	 2:选择获取年龄18岁以上的对象集合的姓名: <s:property value="dataInfoList.{?#this.age>=18}.{user_name}"/><br/>
     3:选择获取年龄18岁以上的对象集合第一个姓名:dataInfoList.{?#this.age>=18}.{user_name}[0]= <s:property value="dataInfoList.{?#this.age>=18}.{user_name}[0]"/><br/>
     4:选择获取年龄18岁以上的对象集合第一个姓名: dataInfoList.{^#this.age>=18}.{user_name}=<s:property value="dataInfoList.{^#this.age>=18}.{user_name}"/><br/>
  	 5:选择获取以上的对象集合最后一个姓名: dataInfoList.{$#this.age>=1}.{user_name}=<s:property value="dataInfoList.{$#this.age>=1}.{user_name}"/><br/>
	 6:选择获取年龄18岁以上的对象集合的姓名的人数: <s:property value="dataInfoList.{?#this.age>=18}.{user_name}.size()"/><br/>
  
   
    <s:debug></s:debug>
  </body>
</html>
分享到:
评论

相关推荐

    Struts2 ognl

    Struts2 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它在Struts2框架中扮演着核心角色,用于数据绑定、控制流程以及动态方法调用。这篇博文可能详细介绍了Struts2框架中OGNL的使用、工作原理...

    struts2 ognl的用法

    ### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...

    struts2 ognl用法项目

    在这个“Struts2 OGNL用法项目”中,我们将深入探讨OGNL(Object-Graph Navigation Language),它是Struts2中一个强大的表达式语言,用于在模型对象和视图之间进行数据绑定和表达式计算。 OGNL是Struts2的核心组件...

    struts2 ognl源码

    OGNL(Object-Graph Navigation Language)是Struts2中的核心表达式语言,用于在Action对象和视图之间传递数据。在这个主题中,我们将深入探讨Struts2 OGNL2.6.11的源码,了解其内部工作原理和关键功能。 首先,...

    struts2 OGNL表达式

    Struts2 OGNL表达式是Java开发中一个重要的知识点,尤其在Web应用程序设计中扮演着核心角色。OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据...

    struts2 ognl表达式

    Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...

    struts2 OGNL表达式使用

    struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...

    struts2 OGNL语言学习笔记

    Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...

    Struts2 OGNL标签详解析实例

    Struts2 OGNL---标签详解析 都有实例 适合初学者

    struts2中的OGNL的源码

    其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达语言,用于在视图层与模型层之间传递数据。在深入理解OGNL的源码之前,我们首先需要了解OGNL的基本概念和用法。 OGNL是一种强大的表达式语言...

    Struts2 OGNL示例(Maven项目)

    这个"Struts2 OGNL示例(Maven项目)"提供了使用OGNL与Struts2集成的实例,帮助开发者更好地理解和应用这一强大的特性。 首先,让我们了解什么是OGNL。OGNL是一种强大的表达式语言,允许我们访问和修改对象图中的...

    Struts2核心包ognl-2的源代码

    这个压缩包包含的是OGNL的2版本的源代码,这对于理解Struts2框架的工作原理以及OGNL语言的实现细节非常有帮助。 OGNL的主要功能是提供一种简洁的方式来获取和设置对象的属性,甚至可以处理复杂的对象图。例如,你...

    struts2 OGNL 详细教程

    关于struts2 OGNL 详细教程,对初学者有帮助

    struts2 OGNL 表达式及各种标签的使用

    Struts2 OGNL(Object-Graph Navigation Language)表达式是一种强大的、动态的数据绑定和脚本语言,广泛应用于Struts2框架中。它允许开发者在视图层与模型层之间灵活地传递数据,增强了MVC架构中的灵活性。本文将...

    struts2 ognl

    8. **Struts2中的OGNL拦截器**:Struts2框架使用了一系列拦截器来增强OGNL的功能,例如ValueStack,它可以将Action上下文中的所有对象暴露给OGNL表达式。这使得在视图层直接访问Action的属性变得简单。 总的来说,...

    struts2 OGNL

    Struts2 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,广泛应用于Apache Struts2框架中,用于在视图、控制器和模型之间进行数据的表达和操作。Struts2是Java Web开发中最流行的MVC框架之一,而...

    struts2 Ognl表单提交问题

    ### Struts2 OGNL 表单提交问题详解 #### 一、背景介绍 Struts2框架作为一款流行的企业级应用开发框架,在处理MVC架构方面有着独特的优势。其中,OGNL (Object-Graph Navigation Language) 作为一种强大的表达式...

    struts2 ognl源文件

    struts2 ognl源文件 在ECLIPSE导入后可方面的利于开发

Global site tag (gtag.js) - Google Analytics