<?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表达式语言以及标签库。 **OGNL(对象图导航语言)** OGNL是一种强大的表达式语言,它允许开发者通过简洁的语法来访问和操作对象的属性。在Struts2框架中,OGNL扮演着至关重要的...
OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,用于获取和设置 Java 对象的属性。它最初是由 John Rose 和 Luke Blanshard 开发,并被广泛应用于多种框架中,尤其是在 Spring Expression ...
这篇深入学习的文章主要探讨了OGNL表达式的原理和使用。 首先,我们来理解一下OGNL是什么。OGNL是一种强大的表达式语言,允许开发者通过简单的字符串表达式来访问和修改对象图。在Struts2中,OGNL用于在Action和...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于数据绑定和表示层的数据交换。这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心...
而OGNL(Object-Graph Navigation Language)是Struts2中使用的一种强大的表达式语言,用于在视图层和模型层之间传递数据。在本案例中,我们将深入探讨OGNL表达式的用法及其在Struts2中的应用。 首先,OGNL是一种...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用程序,特别是Web开发中的框架,如Struts 2。...通过深入学习,你可以更好地驾驭这门表达式语言,为你的Web应用开发带来便利。
总结,"OGNL表达式2讲"是一个深入学习OGNL表达式的资源,涵盖了OGNL的基本语法、与标签的配合、集合操作、上下文访问以及安全性考虑。通过案例学习,有助于开发者更好地理解和应用OGNL在实际项目中的功能。记得下载...
在深入学习Struts2 OGNL表达式时,了解以下几点至关重要: 1. **OGNL基础语法**:包括变量引用、属性访问、集合操作、方法调用等。 2. **Struts2动作和结果**:如何在配置文件中使用OGNL定义Action和结果。 3. **...
Struts2是一个流行的Java Web应用程序框架,它极大地简化了MVC(模型-视图-控制器)架构的实现。...在学习过程中,记得关注OGNL表达式的语法、安全问题(如防止OGNL注入攻击)以及性能优化等方面的知识。
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,主要在Java开发中用于获取和设置对象的属性。它的设计目标是提供一种简洁且灵活的方式来访问和操作对象图。在Struts2框架中,OGNL作为默认的表示...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于Spring框架和其他许多Java应用中,用于数据绑定和表达式评估。本篇将详细介绍OGNL的使用方法及其...
### 精通Struts2中的OGNL表达式 在深入探讨Struts2框架的核心功能时,理解并熟练掌握OGNL(Object-Graph Navigation Language)表达式的应用是至关重要的一步。OGNL是一种强大的表达式语言,它允许开发者通过简洁、...
OGNL表达式的强大之处还在于它的灵活性。它可以处理复杂的逻辑,如条件判断和循环,以及对数组和集合的操作。例如,`list[0].property`可以获取列表的第一个元素的`property`属性。此外,OGNL支持动态类型转换,这...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于Spring框架的视图层,以及许多其他Java应用中,用于数据绑定和表达式计算。本案例主要关注OGNL的...
OGNL,全称为Object-Graph Navigation Language,是一种功能强大的表达式语言,它在Java开发领域中被广泛用于获取、设置对象属性以及执行对象的方法。OGNL的强大之处在于其能够灵活地处理复杂的对象图导航,使得数据...
Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...
OGNL,全称为Object-Graph Navigation Language,是一种强大的表达式语言,主要被用于获取和设置Java对象的属性。它在Java开发中广泛应用于Spring框架、Struts2等,提供了简洁而灵活的方式来访问和操作对象的属性。...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种表达式语言,用于访问和操作对象的属性。OGNL上下文(OGNL Context)和Action上下文是Struts2中两个重要的概念,它们对于理解和使用OGNL表达式至关重要...
**OGNL(Object-Graph Navigation Language)**是一种强大的表达式语言,主要被广泛应用于Java领域,用于获取和设置对象的属性。它允许开发者通过简洁的语法来导航对象图,执行复杂的逻辑运算,以及调用方法。这篇...