18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

41.struts2第三天ONGL

1. OGNL表达式

OGNL:对象视图导航语言 例:${user.name}

OGNL支持比el更加丰富的功能。

OGNLstruts2没有关系。

导包:因为struts2提供的包里包含了OGnl的包,所以此时不需要导包。

OGNL是主要用于取值的语言。

El 的取值范围:11个内置对象:

requestScope

sessionScope

applicationScope

pageScope

pageContext

params

paramValues

header

headerValues

cookie

initParams

2. ONGL的搭建

需要建两个对象,RootContext对象,其中Context对象是一个Map值是Root对象。

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

3. OGnL表达式语法:最重要的2种语法

Root中取某个属性,直接:

String  name =(String )ONGL.getValue(“属性名”,oc,oc.getRoot());

Context中取属性:

String name=(String )ONGL.getValue(“#键名.属性名”,oc,oc.getRoot());

4. OGNL表达式语法:给属性赋值

root对象属性赋值:

ONGL.getValue(“属性名=xxx”,oc,oc.getRoot());

context对象属性赋值:(可以连续赋值,但是不可以串连取值《串联取值返回最后一个值》)。但可以先赋再取。

OnGL.getValue(“#键名.属性名=xxx’,#键名.属性名=xxx”,oc,oc.getRoot());

5.OGNL表达式:使用java语法赋值,取值

Ongl.getValue(“setName(‘name’)”,oc,oc.getRoot());

ONGL.getValue(“getName()”,oc,oc.getRoot());

ONGL.getValue(“#key.setNmae(‘ll’)”,oc,oc.getRoot());

6.OGNL可以调用静态方法:

语法:@完整类名@方法名()或者成员变量名。

例:

Double pi=(double)ONGL.getValue(“@[email protected]”,oc,oc.getRoot());

7.OGNL还可以创建对象:

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

8. OGNLStruts2的结合:

valueStack值栈

OGNL表达式运行需要一个OGNLContextStruts2准备了一个ValueStack

ValueStack由两部分组成,root(放置栈)和Context(放置之前学的ActionContext数据中心)。

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

当在Root取值,会从栈顶开始取。

默认情况下,root中放置当前访问的Action对象

9. 栈原理:

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

10. Struts2Degbug标签:暂略

11. ONGLstruts2结合-参数赋值-参数接收模型驱动

我们只需要在赋值前,将接收参数的对象压栈中即可。Struts2是在param拦截器时将赋值操作交给了OGNL

param拦截器之前有一个拦截器PrepareInterceptor实现这个接口可以进行压栈工作。

然而,学习了ModelDriven<对象>就用不着上述了。

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

12. 获得值栈:ValueStack vs=ActionContext.getContext().getValueStack();  cs.push();压栈操作

13. 配置文件重定向到Action如何配置?

当重定向向提交参数时,可以再加一个元素param当它不认识这个param时就会把它当作参数提交到后面。

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

14. 配置文件中应用ONGL:提交动态参数:

在配置文件中使用OGNL表达式提交动态参数:

<param  name=”name”>${name}</param>会去root内的栈拿属性值。

15. 扩展Struts2流程

先判断是否由struts2处理,如果不处理chain放行。否则Struts2处理,创建数据中心(咱们这个ActionContext就是值栈的context部分new成的)

 18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式

18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式