Struts 2 第19part OGNL 表达式的初步使用
2013-02-19 10:08
417 查看
2013年2月19日 天气晴
Struts 2 第19part OGNL 表达式的初步使用
新的一part,OGNL表达式的学习,这里只是为了说明什么是OGNL表达式,OGNL用在什么位置,怎么使用这些问题?
那么,OGNL的全称是什么?
Object Graph Navigation Language 对象图导航语言
OGNL表达式的基本单位是"导航链",一般导航链由如下几个部分组成:
属性名称(property)
方法调用(method invoke)
数组元素
所有的OGNL表达式都基于当前对象的上下文来完成求值运算,链的前面部分的结果将作为后面求值的上下文。
关于OGNL可不是一个能简单介绍完的东西,但使用起来确实是比较爽的。
具体怎么用,下面例子,看完之后就能知道一二了。
实例:/Struts2_OGNL
我们要得到的效果如下图,内容稍微多一点,不过都不难。
看到上面的结果,一下子可能就懵了,但没有说一下子把所有结果都能显示出来,一条一条来试,当然小巫已经试过了,就不再这里再一条条来写。直接给出源代码。
再来看看项目结构:
整个项目执行流程:从index.jsp开始->struts.xml->Action类->struts.xml->ognl.jsp
index.jsp
struts.xml
包含进来的ognl.xml配置文件
OgnlAction.java
User.java
Cat.java
Dog.java
S.java
整个项目的代码贴放完毕,关于OGNL这一part的学习,就这么多。不多说了。
本文出自 “一曲待续” 博客,请务必保留此出处http://wwj9520.blog.51cto.com/5769922/1135341
Struts 2 第19part OGNL 表达式的初步使用
新的一part,OGNL表达式的学习,这里只是为了说明什么是OGNL表达式,OGNL用在什么位置,怎么使用这些问题?
那么,OGNL的全称是什么?
Object Graph Navigation Language 对象图导航语言
OGNL表达式的基本单位是"导航链",一般导航链由如下几个部分组成:
属性名称(property)
方法调用(method invoke)
数组元素
所有的OGNL表达式都基于当前对象的上下文来完成求值运算,链的前面部分的结果将作为后面求值的上下文。
关于OGNL可不是一个能简单介绍完的东西,但使用起来确实是比较爽的。
具体怎么用,下面例子,看完之后就能知道一二了。
实例:/Struts2_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/> <li>访问静态方法:<s:property value="@com.wwj.struts2.ognl.S@s()"/></li> <li>访问静态属性:<s:property value="@com.wwj.struts2.ognl.S@STR"/></li> <li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li> <hr/> <li>访问普通类的构造方法:<s:property value="new com.wwj.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>访问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> <li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li> <li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li> <li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li> <hr /> <li>[]:<s:property value="[0].username"/></li> </ol> <s:debug></s:debug> </body> </html>
再来看看项目结构:
整个项目执行流程:从index.jsp开始->struts.xml->Action类->struts.xml->ognl.jsp
index.jsp
<body> 访问属性 <a href="<%=contextPath %>/ognl.action?username=u&password=p">ognl</a> </body>
struts.xml
<?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> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <!-- 允许访问静态方法 --> <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant> <include file="/com/wwj/struts2/ognl/ognl.xml"/> </struts>
包含进来的ognl.xml配置文件
<?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.wwj.struts2.ognl.OgnlAction"> <result>/ognl.jsp</result> </action> </package> </struts>
OgnlAction.java
package com.wwj.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 { //1.普通属性 private String username; private String password; //2.对象 private User user; //3.对象 private Cat cat; private List<User> users = new ArrayList<User>(); private Set<Dog> dogs = new HashSet<Dog>(); private Map<String, Dog> dogMap = new HashMap<String, Dog>(); 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 getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Cat getCat() { return cat; } public void setCat(Cat cat) { this.cat = cat; } //action的普通方法 public String m() { return "hello"; } public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } public Set<Dog> getDogs() { return dogs; } public void setDogs(Set<Dog> dogs) { this.dogs = dogs; } public Map<String, Dog> getDogMap() { return dogMap; } public void setDogMap(Map<String, Dog> dogMap) { this.dogMap = dogMap; } public Map<String, Dog> getDogmap() { return dogMap; } public void setDogmap(Map<String, Dog> dogmap) { this.dogMap = dogmap; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } }
User.java
package com.wwj.struts2.ognl; public class User { private int age = 8; //必须要有这个默认构造方法 public User() { super(); } public User(int age) { super(); this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { // TODO Auto-generated method stub return "user" + age; } }
Cat.java
package com.wwj.struts2.ognl; public class Cat { private Dog friend; public Dog getFriend() { return friend; } public void setFriend(Dog friend) { this.friend = friend; } public String miaomiao() { return "miaomiao"; } }
Dog.java
package com.wwj.struts2.ognl; public class Dog { private String name; public Dog() { super(); } public Dog(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Dog [name=" + name + "]"; } }
S.java
package com.wwj.struts2.ognl; public class S { public static String STR = "STATIC STRING"; public static String s() { return "static method"; } }
整个项目的代码贴放完毕,关于OGNL这一part的学习,就这么多。不多说了。
本文出自 “一曲待续” 博客,请务必保留此出处http://wwj9520.blog.51cto.com/5769922/1135341
相关文章推荐
- struts ognl表达式$%#三个符号使用
- 【Struts2+Hibernate4】按照MVC思想使用Hibernate查询数据库,并且在前台使用OGNL表达式输出
- 【Struts2五】ValueStack以及ognl表达式二(经常使用标签)
- Struts2.1 OGNL 表达式 学习笔记(转)
- C# 3.0新特性初步研究 Part4:使用集合类型初始化器_C#教程
- struts2.5初步使用教程
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
- Struts2 使用OGNL表达式投影(过滤)
- 关于struts2中使用OGNL表达式取值,取不到值的原因及解决方法
- [C#][固定格式网页解析]使用正则表达式处理网页的初步体会
- OGNL表达式的使用
- Struts2.1 OGNL 表达式 学习笔记
- SSH与SSM学习之Struts209——OGNL表达式与Struts框架结合参数接收
- [C#][固定格式网页解析]使用正则表达式处理网页的初步体会
- [C#][固定格式网页解析]使用正则表达式处理网页的初步体会
- 通过实例深入学习Java的Struts框架中的OGNL表达式使用
- 中文正则表达式初步使用
- ognl学习(二)---struts2标签库与OGNL表达式的使用
- struts2第十七讲学习笔记,Action处理复选框与JSP页面使用ognl处理map
- Struts Ognl表达式语言几个符号 % $ #