- 浏览: 198437 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
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 688项目之分析和设计 项目/产品开发步骤如下: ... -
STRUTS2 国际化(I18N)
2011-12-12 19:41 973STRUTS2 国际化:1:I18N原理 packag ... -
Struts2的拦截器基本原理
2011-12-12 18:14 817Struts2的拦截器基本原理 主要是通过jav ... -
Struts2 异常处理
2011-12-12 17:26 962Struts2 异常处理机制 任何程序设计语言都是有异常 ... -
Struts2 之struts tags
2011-12-12 17:12 986Struts2 的struts 标签 实战 ... -
Struts2 Result 实例
2011-12-05 18:50 10931:Action result type 常用的四种类 ... -
Struts2 之Result
2011-12-03 13:27 720在struts2框架中,当act ... -
Struts2 Action 通配符
2011-12-01 11:06 1057Struts2 Action 通配符 在stru ... -
Struts2 Action 访问web 元素、Action模块包含、默认Action
2011-12-01 10:58 1178<%@ page language="java ... -
Struts2 Action接受参数、简单数据验证
2011-12-01 10:55 914Struts2 Action接受参数 STEP 1: ... -
Struts2的动态方法调用
2011-11-29 10:19 1182Struts2的动态方法调用 在struts2中,可 ... -
struts2的路径和通配符
2011-11-28 19:07 965struts2的路径1) 在struts2中的路径问题是根据a ... -
Struts2 之Action
2011-11-25 17:11 703在Struts2中 Action 的操作可以在struts.x ... -
Struts2 之ACTION的namespace
2011-11-25 14:07 898struts2的命名空间分为两类: 1)默认命名空 ... -
Struts2 入门概述
2011-11-25 11:05 818Struts2 入门概述 Struts2 主要是通过导 ... -
Struts2 简介、设计思想、 核心 、流程
2011-11-25 10:47 1133切忌:做事情的条理性和管理自己的习惯性,不能到处乱 ...
相关推荐
struts2的ognl
Struts2 OGNL---标签详解析 都有实例 适合初学者
关于struts2 OGNL 详细教程,对初学者有帮助
struts2 ognl2.6.11源代码,官网上下要很麻烦,麻烦的事就我帮各位做了
对 Struts2 OGNL 的分析与简介
本资源适合刚接触Struts和Ognl的小伙伴交流学习,欢迎吐槽。
struts2 ognl源文件 在ECLIPSE导入后可方面的利于开发
NULL 博文链接:https://chaoyi.iteye.com/blog/2161928
从官网checkout下来的源码,如果大家觉的区官网麻烦可以直接下载这个
struts2 ognl 取list ,set map ,方法,静态变量的值,
struts2OGNL表达式ActionContext及valuesStack.pdf
Struts2学习计划5---Struts2_OGNL(对象图导航语言)的学习
主要是ognl的用法,很适合新手上路的,源代码很清晰可见,一看就懂
struts2中ognl表达式的用法,详细介绍了ognl表达式与struts2基本标签的结合。
struts2 OGNL之标签访问值栈(value stack)用法,希望能对大家有帮助
Struts2中ognl-2的源代码,从官网下载的
Struts2的OGNL示例,使用Maven构建,导入请前先安装maven。
在struts2编程中,ognl帮助文档,你可导入到工程里,就可以查看相关文档。
本人在学习struts2框架时的学习笔记,主要是ognl表达式语言的运用。希望对大家有所帮助!