18.01.18,web学习第四十一天,还有半年,努力吧青年 struts2第三天 OGNL表达式
41.struts2第三天ONGL
1. OGNL表达式
OGNL:对象视图导航语言 例:${user.name} OGNL支持比el更加丰富的功能。 OGNL与struts2没有关系。 导包:因为struts2提供的包里包含了OGnl的包,所以此时不需要导包。 OGNL是主要用于取值的语言。 |
El 的取值范围:11个内置对象: requestScope sessionScope applicationScope pageScope pageContext params paramValues header headerValues cookie initParams |
2. ONGL的搭建
需要建两个对象,Root和Context对象,其中Context对象是一个Map值是Root对象。 |
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还可以创建对象:
|
8. OGNL与Struts2的结合:
valueStack值栈 OGNL表达式运行需要一个OGNLContext,Struts2准备了一个ValueStack。 ValueStack由两部分组成,root(放置栈)和Context(放置之前学的ActionContext数据中心)。 当在Root取值,会从栈顶开始取。 默认情况下,root中放置当前访问的Action对象 |
9. 栈原理:
|
10. Struts2的Degbug标签:暂略
11. ONGL与struts2结合-参数赋值-参数接收模型驱动
我们只需要在赋值前,将接收参数的对象压栈中即可。Struts2是在param拦截器时将赋值操作交给了OGNL。 在param拦截器之前有一个拦截器PrepareInterceptor实现这个接口可以进行压栈工作。 然而,学习了ModelDriven<对象>就用不着上述了。 |
12. 获得值栈:ValueStack vs=ActionContext.getContext().getValueStack(); cs.push();压栈操作
13. 配置文件重定向到Action如何配置?
当重定向向提交参数时,可以再加一个元素param当它不认识这个param时就会把它当作参数提交到后面。 |
14. 配置文件中应用ONGL:提交动态参数:
在配置文件中使用OGNL表达式提交动态参数: <param name=”name”>${name}</param>会去root内的栈拿属性值。 |
15. 扩展Struts2流程
先判断是否由struts2处理,如果不处理chain放行。否则Struts2处理,创建数据中心(咱们这个ActionContext就是值栈的context部分new成的) |