我是靠谱客的博主 诚心河马,这篇文章主要介绍Struts2(15)_Struts2 的 ognl 表达式一、什么是 ognl 表达式二、ognl 对普通方法的调用三、ognl 对静态变量和静态方法的调用四、ActionContext,现在分享给大家,希望可以做个参考。
本系列博客汇总在这里:Struts2 汇总
ognl 表达式
- 一、什么是 ognl 表达式
- 二、ognl 对普通方法的调用
- 三、ognl 对静态变量和静态方法的调用
- 四、ActionContext
- 1、在 context map 中存取数据
- 2、在值栈中存取数据
源码工程文件为:struts2_17
一、什么是 ognl 表达式
- OGNL 是 Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts2 框架使用 OGNL 作为默认的表达式语言。
- 作用:取值,获取 javaBean 中的属性,获取 List 或者数组元素,获得 map 的键值对,还可以执行逻辑运算。
- 要求:我们必须把 ognl 表达式写在 struts 的标签中。
二、ognl 对普通方法的调用
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <%-- 在<s:properties >的value属性中""内部是ognl表达式,如果要输出字符串要加'' --%> <s:property value="'weiyuxaun'"/> <%-- 在<s:properties >的value属性中""内部是ognl表达式,可以使用java的api --%> <s:property value="'weiyuxaun'.toUpperCase()"/> </body> </html>
三、ognl 对静态变量和静态方法的调用
静态变量和静态方法的调用都要使用:@类的全路径@[静态变量或静态方法]
,但是如果是静态方法的调用必须要先开启。
复制代码
1
2
3<!-- 开启ognl对静态方法的调用 --> <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <s:property value="@java.lang.Integer@MAX_VALUE"/> <s:property value="@java.lang.Math@abs(-100)"/> </body> </html>
四、ActionContext
context map:是每次请求访问时存储数据的对象,每一次请求都会创建 context map,我们可以把数据来存放到map 中。
每一个请求访问时都会创建一个 contextMap 的对象,ValueStack 和 contextmap 的数据是关联的可以相互转化。
我们的数据采用两个存储的结构来存储一个 valueStack(set(map)),contextMap(map)。
1、在 context map 中存取数据
-
在请求范围内存储数据。
复制代码1
2
3
4
5
6
7
8
9
10
11@Override public String execute() throws Exception { System.out.println(username); //获得动作类的上下文ActionContext包含了contextmap和valuestack ActionContext ac = ServletActionContext.getContext(); //在contextmap中存储数据,默认的相当于request,因为ActionContext的生命周期和request一样都是一次请求 ac.put("name", "weiyuxuan"); return super.execute(); }
在 contextmap 中取数据要使用
#
复制代码1
2
3<s:property value="#name"/> <s:debug></s:debug>
-
在会话范围存储数据
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13@Override public String execute() throws Exception { System.out.println(username); //获得动作类的上下文ActionContext包含了contextmap和valuestack ActionContext ac = ServletActionContext.getContext(); //在contextmap中存储数据,默认的相当于request,因为ActionContext的生命周期和request一样都是一次请求 ac.put("name", "weiyuxuan"); //把数据存储在会话范围 ac.getSession().put("user", "魏宇轩是一个好人!"); return super.execute(); }
取值时语法
复制代码1
2
3<s:property value="#session.user"/> <s:debug></s:debug>
-
在应用级别的存储数据
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@Override public String execute() throws Exception { System.out.println(username); //获得动作类的上下文ActionContext包含了contextmap和valuestack ActionContext ac = ServletActionContext.getContext(); //在contextmap中存储数据,默认的相当于request,因为ActionContext的生命周期和request一样都是一次请求 ac.put("name", "weiyuxuan"); //把数据存储在会话范围 ac.getSession().put("user", "魏宇轩是一个好人!"); //在应用范围内存数据 ac.getApplication().put("pv", 12345); return super.execute(); }
取数据
复制代码1
2
3<s:property value="#application.pv"/> <s:debug></s:debug>
2、在值栈中存取数据
会把请求传递的参数存储在值栈中,同时把 Action 对象也压入栈中,属性对象在上面 Action 在下面,对象的值既可以从栈顶取,也可以从 Action 的 person 属性中来取。
从值栈中取数据 ognl 表达式不需要 #
复制代码
1
2
3
4
5
6<h3>从栈顶取Action对象中的model的值</h3> <s:property value="username"/> <s:property value="person.personId"/> <s:property value="person.personName"/> <s:property value="person.gender"/>
手动通过栈放入的数据也会放入栈顶,但是在 Action 对象中不会存储在相应属性数据
如有错误,欢迎指正!
最后
以上就是诚心河马最近收集整理的关于Struts2(15)_Struts2 的 ognl 表达式一、什么是 ognl 表达式二、ognl 对普通方法的调用三、ognl 对静态变量和静态方法的调用四、ActionContext的全部内容,更多相关Struts2(15)_Struts2内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复