- 浏览: 203745 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
materigirl:
实例化的引用变量没有调用toString()方法当然没用了。 ...
Java 泛型之简单类型的多参数类型 -
zds420:
xiaojianhx 写道如果action分散在不同的包里面要 ...
Struts2 Action 通配符 -
xiaojianhx:
如果action分散在不同的包里面要如何配置呢?如:
com. ...
Struts2 Action 通配符 -
zds420:
Zhang987526341 写道求lz 详细说说,我复制您的 ...
COOKIE IP地址限制投票次数 -
Zhang987526341:
求lz 详细说说,我复制您的代码后,要怎么改啊 。。初学者,求 ...
COOKIE IP地址限制投票次数
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>
发表评论
-
Struts2 项目之分析和设计
2011-12-27 10:48 722项目之分析和设计 项目/产品开发步骤如下: ... -
STRUTS2 国际化(I18N)
2011-12-12 19:41 1001STRUTS2 国际化:1:I18N原理 packag ... -
Struts2的拦截器基本原理
2011-12-12 18:14 847Struts2的拦截器基本原理 主要是通过jav ... -
Struts2 异常处理
2011-12-12 17:26 988Struts2 异常处理机制 任何程序设计语言都是有异常 ... -
Struts2 之struts tags
2011-12-12 17:12 1026Struts2 的struts 标签 实战 ... -
Struts2 Result 实例
2011-12-05 18:50 11131:Action result type 常用的四种类 ... -
Struts2 之Result
2011-12-03 13:27 754在struts2框架中,当act ... -
Struts2 Action 通配符
2011-12-01 11:06 1087Struts2 Action 通配符 在stru ... -
Struts2 Action 访问web 元素、Action模块包含、默认Action
2011-12-01 10:58 1209<%@ page language="java ... -
Struts2 Action接受参数、简单数据验证
2011-12-01 10:55 938Struts2 Action接受参数 STEP 1: ... -
Struts2的动态方法调用
2011-11-29 10:19 1203Struts2的动态方法调用 在struts2中,可 ... -
struts2的路径和通配符
2011-11-28 19:07 998struts2的路径1) 在struts2中的路径问题是根据a ... -
Struts2 之Action
2011-11-25 17:11 725在Struts2中 Action 的操作可以在struts.x ... -
Struts2 之ACTION的namespace
2011-11-25 14:07 925struts2的命名空间分为两类: 1)默认命名空 ... -
Struts2 入门概述
2011-11-25 11:05 857Struts2 入门概述 Struts2 主要是通过导 ... -
Struts2 简介、设计思想、 核心 、流程
2011-11-25 10:47 1159切忌:做事情的条理性和管理自己的习惯性,不能到处乱 ...
相关推荐
Struts2 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它在Struts2框架中扮演着核心角色,用于数据绑定、控制流程以及动态方法调用。这篇博文可能详细介绍了Struts2框架中OGNL的使用、工作原理...
### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...
在这个“Struts2 OGNL用法项目”中,我们将深入探讨OGNL(Object-Graph Navigation Language),它是Struts2中一个强大的表达式语言,用于在模型对象和视图之间进行数据绑定和表达式计算。 OGNL是Struts2的核心组件...
OGNL(Object-Graph Navigation Language)是Struts2中的核心表达式语言,用于在Action对象和视图之间传递数据。在这个主题中,我们将深入探讨Struts2 OGNL2.6.11的源码,了解其内部工作原理和关键功能。 首先,...
Struts2 OGNL表达式是Java开发中一个重要的知识点,尤其在Web应用程序设计中扮演着核心角色。OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据...
Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...
struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...
Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...
Struts2 OGNL---标签详解析 都有实例 适合初学者
其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达语言,用于在视图层与模型层之间传递数据。在深入理解OGNL的源码之前,我们首先需要了解OGNL的基本概念和用法。 OGNL是一种强大的表达式语言...
这个"Struts2 OGNL示例(Maven项目)"提供了使用OGNL与Struts2集成的实例,帮助开发者更好地理解和应用这一强大的特性。 首先,让我们了解什么是OGNL。OGNL是一种强大的表达式语言,允许我们访问和修改对象图中的...
这个压缩包包含的是OGNL的2版本的源代码,这对于理解Struts2框架的工作原理以及OGNL语言的实现细节非常有帮助。 OGNL的主要功能是提供一种简洁的方式来获取和设置对象的属性,甚至可以处理复杂的对象图。例如,你...
关于struts2 OGNL 详细教程,对初学者有帮助
Struts2 OGNL(Object-Graph Navigation Language)表达式是一种强大的、动态的数据绑定和脚本语言,广泛应用于Struts2框架中。它允许开发者在视图层与模型层之间灵活地传递数据,增强了MVC架构中的灵活性。本文将...
8. **Struts2中的OGNL拦截器**:Struts2框架使用了一系列拦截器来增强OGNL的功能,例如ValueStack,它可以将Action上下文中的所有对象暴露给OGNL表达式。这使得在视图层直接访问Action的属性变得简单。 总的来说,...
Struts2 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,广泛应用于Apache Struts2框架中,用于在视图、控制器和模型之间进行数据的表达和操作。Struts2是Java Web开发中最流行的MVC框架之一,而...
### Struts2 OGNL 表单提交问题详解 #### 一、背景介绍 Struts2框架作为一款流行的企业级应用开发框架,在处理MVC架构方面有着独特的优势。其中,OGNL (Object-Graph Navigation Language) 作为一种强大的表达式...
struts2 ognl源文件 在ECLIPSE导入后可方面的利于开发