您的位置:首页 > 产品设计 > UI/UE

JavaEE--SSH--structs2-OGNL表达式,contextMap,值栈valueStack的介绍及使用

2018-03-09 15:39 716 查看
一.概述:OGNL意为对象图导航语言.是一种表达式语言.原本是xwork的默认表达式语言,后来被整合进struts2中成为默认表达式语言.它可以通过某种表达式语法.存取Java对象的任意属性.调用Java对象的方法.同时能够自动实现必要的类型转换.
二.使用前提:1.导包使用OGNL表达式需要引入下面两个包.javassist-3.11.0.GA.jar
ognl-3.0.6.jar
2.jsp页面引入标签库<%@taglib uri="/struts-tags" prefix="s"%>

三.基本用法:1.<s:property value="ONGLexpression "/>  从上下文对象中取得的value值输出到浏览器上.2.OGNL表达式调用普通方法: <s:property value=" 'OGNLexpression'.length() "/>3.OGNL表达式调用静态属性: <s:property value="@java.lang.Integer.MAX_VALUE "/> //获得int类型最大值4.OGNL表达式调用静态方法:<s:proprety value="@java.lang.math@random()" /> 5.OGNL表达式创建集合 List:   <s:radio name="sex" list="{'man','women'}" label="性别" /> //radio标签可以显示一个单选按钮 Map:  <s:radio name="sex" map="#{'man':'男','women':'女'}" label="性别"/>
四:OGNL上下文对象ContextMap.ContextMap是struts2中封装的数据最大的对象.我们每次请求的所有数据都可以装到里面.它是一个map结构.key是字符串.value是对象.ContextMap中封装了大量的数据,但我们只看常用的封装内容.applicaiton :封装应用域的所有数据session: 封装会话域的所有数据request: 封装请求域的所有数据valueStack: 值栈,list结构 ,重点学习.
既然提到了ContextMap.那就必须说说ActionContext
五.ActionContextActionContext是strtus2提供的一个实现类,是对ContextMap进行的再一次封装.使用它操作上下文对象更加方便.
1.ActionContext创建的时机:当我们每次访问的Action创建时,核心控制器会帮我们创建ActionContext.2.ActionContext的线程安全:由于JavaWeb工程是多线程的,每个线程在访问action时都会创建自己的ActionContext,如何保证在获取ActionContext时,每个线程都能获取到自己的那个呢?答案是将ActionContext绑定到当前线程上.
六.获取ContextMap中的数据.1.action中往上下文对象存数据:ActionContext ac = ActionContext.getContext();ac.put("name","柳岩");2.从页面上获取:<h1>获取大MAP中的数据</h1>
<s:property value="#name" />3.struts2.xml配置文件<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<package name="p1" extends="struts-default">
</package>
<package name="p2" extends="p1">
<action name="demo02" class="cn.asiainfo.struts2.web.action.ActionDemo02"
method="demo01">
<result name="success" type="dispatcher">/demo02.jsp</result>
</action>
</package>
</struts>
4.效果如图:


5.结论:我们在contextMap上存的数据是可以在jsp页面上通过OGNL表达式获取的.
七:值栈(valueStack)
1.介绍:valueStack是struts的一个接口.OgnlValueStack是valueStack的实现类.当一个请求进来的时候struts2会创建一个Action实例,同时创建一个OgnlValueStack值栈实例,生命周期和Action一样长.
值栈的结构是List,是一个可以快速访问的容器.可以从页面上取数据. 另外值栈里面定义了一个ContextMap的引用,通过值栈也可以访问到contextMap的内容.
2.使用:
action上获取值栈对象:
ActionContext ac = ActionContext.getContext();

ValueStack vs = ac.getValueStack();
 值栈对象存对象:
vs.push(object);
页面上取值栈中的值.
我们想取值栈中对象的属性值:
可以在action中定义属性的get,set方法.
然后在jsp页面通过
<s:property value="属性名">或
<s:property value="[栈中位置].属性名">来进行获取.o

觉得对你有帮助或者喜欢的可以点个赞哦~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: