`

OGNL表达式语言学习

阅读更多
<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>OGNL表达式语言学习</title>
</head>
<body>
	<ol>
		<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
		<li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
		<li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
		<li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
		<li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
		<li>访问值栈中action的普通方法:<s:property value="m()" /></li>
		<hr />
		<!-- 必须在struts.xml中加入    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>,其默认为FALSE,要给为true -->
		<li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
		<li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
		<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
		<hr />
		<li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
		<hr />
		<li>访问List:<s:property value="users"/></li>
		<li>访问List中某个元素:<s:property value="users[1]"/></li>
		<li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
		<li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
		<li>访问Set:<s:property value="dogs"/></li>
		<li>访问Set中某个元素:<s:property value="dogs[1]"/></li><!-- 因为set中没有顺序,所以不能用下标访问其值 -->
		<li>访问Map:<s:property value="dogMap"/></li>
		<li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
		<li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
		<li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
		<li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
		<hr />
		<li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li><!-- ?#表示判断条件, 循环到那个,那个就是this,拿出age=1的那个user对象,此处取得集合的第一个,在结果中,加了中括号的就是集合 -->
		<li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li><!-- ^#表示拿到age>1开头的那个 ^代表开始 -->
		<li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li><!-- $#表示拿到age>1结尾的那个 $代表结束 -->
		<li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
		<hr />
		<!-- 在值栈里从上往下一直数,一直到栈底的Action对象, 如果是第一个Action中没有username这个属性,则找下一个-->
		<li>[]:<s:property value="[0].username"/></li>		
	</ol>	 
	<s:debug></s:debug>
</body>
</html>


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="ognl" extends="struts-default">

        <action name="ognl" class="com.hugui.struts2.ognl.OgnlAction">
            <result>/ognl.jsp</result>
        </action>
        <action name="test" class="com.hugi.struts2.ognl.TestAction">
            <result type="chain">ognl</result>
        </action>

    </package>
</struts>



//其中用的一些class 就不写了
package com.hugui.struts2.ognl;

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;

public class OgnlAction extends ActionSupport {
	private Cat cat;
	private Map<String, Dog> dogMap = new HashMap<String, Dog>();

	private Set<Dog> dogs = new HashSet<Dog>();

	private String password;
	
	//(domain model)只有往User里面传递参数(User.age),且User 一定要提供一个参数为空的构造方法,才会给你构造User对像,也可以手动new ,private User user= new User();
	private User user;
	private String username;

	private List<User> users = new ArrayList<User>();

	public OgnlAction() {
		users.add(new User(1));
		users.add(new User(2));
		users.add(new User(3));

		dogs.add(new Dog("dog1"));
		dogs.add(new Dog("dog2"));
		dogs.add(new Dog("dog3"));
		
		dogMap.put("dog100", new Dog("dog100"));
		dogMap.put("dog101", new Dog("dog101"));
		dogMap.put("dog102", new Dog("dog102"));
		
	}

	public String execute() {
		return SUCCESS;
	}

	public Cat getCat() {
		return cat;
	}
	
	public Map<String, Dog> getDogMap() {
		return dogMap;
	}

	public Set<Dog> getDogs() {
		return dogs;
	}
	
	public String getPassword() {
		return password;
	}
	
	public User getUser() {
		return user;
	}

	public String getUsername() {
		return username;
	}

	public List<User> getUsers() {
		return users;
	}

	public String m() {
		return "hello";
	}

	public void setCat(Cat cat) {
		this.cat = cat;
	}
	
	public void setDogMap(Map<String, Dog> dogMap) {
		this.dogMap = dogMap;
	}

	public void setDogs(Set<Dog> dogs) {
		this.dogs = dogs;
	}

	public void setPassword(String password) {
		this.password = password;
	}

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

	public void setUsername(String username) {
		this.username = username;
	}

	public void setUsers(List<User> users) {
		this.users = users;
	}
}



分享到:
评论

相关推荐

    Struts2的标签库及OGNL表达式语言

    本篇文章将详细探讨Struts2中的OGNL表达式语言以及标签库。 **OGNL(对象图导航语言)** OGNL是一种强大的表达式语言,它允许开发者通过简洁的语法来访问和操作对象的属性。在Struts2框架中,OGNL扮演着至关重要的...

    JS:ognl表达式

    OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,用于获取和设置 Java 对象的属性。它最初是由 John Rose 和 Luke Blanshard 开发,并被广泛应用于多种框架中,尤其是在 Spring Expression ...

    Struts2深入学习----OGNL表达式原理

    这篇深入学习的文章主要探讨了OGNL表达式的原理和使用。 首先,我们来理解一下OGNL是什么。OGNL是一种强大的表达式语言,允许开发者通过简单的字符串表达式来访问和修改对象图。在Struts2中,OGNL用于在Action和...

    Struts2 使用OGNL表达式

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于数据绑定和表示层的数据交换。这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心...

    ognl表达式案例

    而OGNL(Object-Graph Navigation Language)是Struts2中使用的一种强大的表达式语言,用于在视图层和模型层之间传递数据。在本案例中,我们将深入探讨OGNL表达式的用法及其在Struts2中的应用。 首先,OGNL是一种...

    ognl表达式

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用程序,特别是Web开发中的框架,如Struts 2。...通过深入学习,你可以更好地驾驭这门表达式语言,为你的Web应用开发带来便利。

    OGNL表达式2讲

    总结,"OGNL表达式2讲"是一个深入学习OGNL表达式的资源,涵盖了OGNL的基本语法、与标签的配合、集合操作、上下文访问以及安全性考虑。通过案例学习,有助于开发者更好地理解和应用OGNL在实际项目中的功能。记得下载...

    struts2 OGNL表达式

    在深入学习Struts2 OGNL表达式时,了解以下几点至关重要: 1. **OGNL基础语法**:包括变量引用、属性访问、集合操作、方法调用等。 2. **Struts2动作和结果**:如何在配置文件中使用OGNL定义Action和结果。 3. **...

    struts2-OGNL表达式测试

    Struts2是一个流行的Java Web应用程序框架,它极大地简化了MVC(模型-视图-控制器)架构的实现。...在学习过程中,记得关注OGNL表达式的语法、安全问题(如防止OGNL注入攻击)以及性能优化等方面的知识。

    OGNL表达式

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,主要在Java开发中用于获取和设置对象的属性。它的设计目标是提供一种简洁且灵活的方式来访问和操作对象图。在Struts2框架中,OGNL作为默认的表示...

    OGNL表达式的使用及文档

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于Spring框架和其他许多Java应用中,用于数据绑定和表达式评估。本篇将详细介绍OGNL的使用方法及其...

    精通struts2的ognl表达式

    ### 精通Struts2中的OGNL表达式 在深入探讨Struts2框架的核心功能时,理解并熟练掌握OGNL(Object-Graph Navigation Language)表达式的应用是至关重要的一步。OGNL是一种强大的表达式语言,它允许开发者通过简洁、...

    OGNL(jar包)源代码(OGNL表达式实现代码)

    OGNL表达式的强大之处还在于它的灵活性。它可以处理复杂的逻辑,如条件判断和循环,以及对数组和集合的操作。例如,`list[0].property`可以获取列表的第一个元素的`property`属性。此外,OGNL支持动态类型转换,这...

    OGNL表达式案例

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于Spring框架的视图层,以及许多其他Java应用中,用于数据绑定和表达式计算。本案例主要关注OGNL的...

    OGNL - 功能强大的表达式语言

    OGNL,全称为Object-Graph Navigation Language,是一种功能强大的表达式语言,它在Java开发领域中被广泛用于获取、设置对象属性以及执行对象的方法。OGNL的强大之处在于其能够灵活地处理复杂的对象图导航,使得数据...

    struts2 OGNL语言学习笔记

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

    OGNL语言中文资料

    OGNL,全称为Object-Graph Navigation Language,是一种强大的表达式语言,主要被用于获取和设置Java对象的属性。它在Java开发中广泛应用于Spring框架、Struts2等,提供了简洁而灵活的方式来访问和操作对象的属性。...

    OGNL访问OGNL上下文和Action上下文Struts2rarfdsafsdfasdfas

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种表达式语言,用于访问和操作对象的属性。OGNL上下文(OGNL Context)和Action上下文是Struts2中两个重要的概念,它们对于理解和使用OGNL表达式至关重要...

    Ognl的扩展

    **OGNL(Object-Graph Navigation Language)**是一种强大的表达式语言,主要被广泛应用于Java领域,用于获取和设置对象的属性。它允许开发者通过简洁的语法来导航对象图,执行复杂的逻辑运算,以及调用方法。这篇...

Global site tag (gtag.js) - Google Analytics