`
zds420
  • 浏览: 198437 次
  • 性别: 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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics