Struts2学习笔记之OGNL表达式(五)

Struts2学习笔记之OGNL表达式(五)

 

什么是OGNL

          Object Graph Navigation Language ,是一门功能强大的表达式语言,类似于EL。

 

          它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,

 

   调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属      性。

 

 

         OGNL是独立的开源组件

         Struts2对Ognl进行改造和封装,下面我们来简单的介绍下OGNL在Struts2中的使用

 

Struts2中如何使用OGNL表达式

 

1. OGNL访问基本属性

2. OGNL访问实体对象

3. OGNL访问数组/集合

4. OGNL访问Map

5. OGNL运算

6. OGNL调用对象方法

7. OGNL创建集合

8. OGNL创建Map

 

Action中准备数据:

 

package com.mscncn.struts.ch01.web;

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

import com.mscncn.struts.ch01.entity.User;

public class OGNLAction {
	/**
	 * 普通属性
	 */
	private String realName;
	private Integer age;
	/**
	 * 实体对象
	 */
	private User user;
	/**
	 * 数组
	 */
	private String[] langs;
	/**
	 * 集合
	 */
	private List<String> cities;
	private Map<String, String> dataMetas;
	public String ognl(){
		//普通属性
		realName="www.mscncn.com";
		age=20;
		//实体对象
		user=new User();
		user.setUserName("mscncn");
		user.setPassword("mscncn's password");
		//数组
		langs=new String[]{"java","php","c#","Object-c"};
		//集合
		cities=new ArrayList<String>();
		cities.add("北京");
		cities.add("上海");
		cities.add("深圳");
		dataMetas=new HashMap<String, String>();
		dataMetas.put("username", "scott");
		dataMetas.put("password","tigger");
		return "ok";
	}

	public String getRealName() {
		return realName;
	}

	public void setRealName(String realName) {
		this.realName = realName;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String[] getLangs() {
		return langs;
	}

	public void setLangs(String[] langs) {
		this.langs = langs;
	}

	public List<String> getCities() {
		return cities;
	}

	public void setCities(List<String> cities) {
		this.cities = cities;
	}

	public Map<String, String> getDataMetas() {
		return dataMetas;
	}

	public void setDataMetas(Map<String, String> dataMetas) {
		this.dataMetas = dataMetas;
	}
}

 

 struts.xml 配置action:

 

<action name="ognl" class="com.mscncn.struts.ch01.web.OGNLAction" 
      method="ognl">
	<result name="ok">
		/ognl.jsp
	</result>
</action>

 

ognl.jsp:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
 <%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
		<h1>Hello Struts2</h1>
		<h1>========el表达式========</h1>
		真实姓名:${realName }<br/>
		年龄:${age}<br/>
		账号:${user.userName }<br/>
		密码:${user.password }<br/>
		<h1>========ognl表达式========</h1>
		<s:debug />
		<h1>1. 访问基本属性</h1>
		<h2>姓名:<s:property value="realName" />  </h2>
		<h2>年龄:<s:property value="age" />  </h2>
		<h1>2. 访问对象属性</h1>
		<h2>用户名:<s:property value="user.userName" />  </h2>
		<h2>密码:<s:property value="user.password" />  </h2>
		<h1>3. 访问数组/集合的值</h1>
		<h2>语言:<s:property value="langs[0]"/></h2>
		<h2>所有语言:<s:property value="langs"/></h2>
		<h2>城市: <s:property value="cities[0]" /> </h2>
		<h2>所有城市: <s:property value="cities" /> </h2>
		<h1>4. 访问Map</h1>
		<h2>元数据-用户名: <s:property value="dataMetas.username"/> </h2>
		<h2>元数据-密码: <s:property value="dataMetas.password"/> </h2>
		<h1>5. 运算</h1>
		<h2> 介绍自己:<s:property value="'my name is '+realName"/> </h2>
		<h2> 10年后我的年龄: <s:property value="age+10"/> </h2>
		<h1>6. 调用对象的方法</h1>
		<h2>user.toString():   --<s:property value="user.toString()" /></h2>
		<h1>7. 创建集合</h1>
		<h2>集合: <s:property value="{'a','b','c'}"/> </h2>
		<h2>集合类型: <s:property value="{'a','b','c'}.getClass().getName()"/> </h2>
		<h1>8. 创建Map</h1>
		<h2>Map:<s:property value="#{'name':'zs','age':30 }"/>  </h2>
		<h2>Map类型:<s:property value="#{'name':'zs','age':30 }.getClass().getName()"/>  </h2>
</body>
</html>

 

你可能感兴趣的:(EL,Ognl,strtus2)