struts2 中OGNL访问根元素和非根元素有什么区别?
如题,struts2 中OGNL访问根元素和非根元素有什么区别?
根元素直接属性名就可以访问,最多加%{}就可以。 非根元素则要加# 希望对你有帮助。
Struts2中的标签大量用到了OGNL表达式,于是做了一番研究 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,OGNL是一个开源项目,可以访问其官方站点 以获得源代码和相关资料。
OGNL是一种功能强大的EL(Expression Language,表达式语言),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。 OGNL先在WebWork项目中得到应用,也是Struts 2框架视图默认的表达式语言,可以说,OGNL表达式是Struts 2框架的特点之一。
OGNL中主要有下面几个要点: A)String expression_r(OGNL表达式):表示“做什么” B) Object root(根对象):可以理解为OGNL的操作对象。在表达式规定了“做什么”以后,你还需要指定到底“对谁做” C) 有了表达式和根对象,我们实际上已经可以使用OGNL的基本功能。
例如,根据表达式对根对象进行取值或者设值工作。不过通过上面的源代码我们看到,在OGNL的内部,所有的操作都会在一个特定的环境中运行,这个环境就是OGNL的上下文环境(Context)。这个上下文环境(Context),将规定OGNL的操作“在哪里做”。
OGNL的上下文环境是一个Map结构,称之为OgnlContext 在struts2中,数据从View层传递到Controller层或者从Controller层到View层的时候,涉及到数据的存,取和类型转换的问题。Struts2采纳了XWork的OGNL方案。
并且在OGNL的基础上,构建了 OGNLValueStack的机制,从而比较完美的解决了上面的问题。 看看Struts2 的官方文档中怎么说: 从上面的内容中,可以总结出: A) Struts2 中OGNL Context 中有多个根对象(也就是说上下文环境中有多个要操作的对象),上面图中已经标注出来了 application:用于访问ServletContext属性 session:用于访问HttpSession的属性 value stack: 上图中后面标注了一个root,表示它是OGNL上下文中的第一个根对象 request:用于访问HttpServletRequest的属性 parameters:用于访问HTTP请求参数 attr:访问范围中的值,依次搜索page范围,request范围,session范围,application范围 B) Value stack 是OGNL Context中的第一个根元素,可以直接使用表达式访问栈中的对象或者对象的元素。
比如有一个OGNL表达式 : String exp=”name” ,那么OGNL 会从栈顶到栈底依次搜索每一个对象的name属性,以最先找到的为准。 C) 对于上下文中的其它对象(application,session,request,parameters,attr),要访问它们则必须在前面加上 “#”,而访问Value Stack是不用加”#”的相当于 tContext()。
如: #parameters[‘userName’] = tParameter(“userName”) 取得请求参数userName的值 # er 或者#request[‘user’]= tAttribute(“user”) 取得request范围中的user对象 # er 或者#session[‘user’]= tAttribute(“user”) 取得session范围中的user对象 # er 或者#application[‘user’]= tAttribute(“user”) 取得application范围中的user对象 在OGNL表达式中 #的用法有三种: A:访问非根对象属性,例如示例中的# g表达式,由于Struts 2中 ValueStack被视为根对象,所以访问其他非根对象时,需要加#前缀。
实际上 #相当于 tContext();#g表达式相当于tContext()。getSession()。getAttribute("msg")。 B:用于过滤和投影(projecting)集合,如示例中的persons。{?# e>20}。
C:用来构造Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。 。
答:void setValue(String value)表明Value是个字符串数据 但是要将这个alue数据传递给你的类属性,该方法会根据对应属性的数据类型进行...详情>>
答:详情>>
答:三级网络技术考试大纲 三级网络新大纲 基本要求 1. 具有计算机系统及应用的基础知识。 2. 掌握计算机局域网的基本概念和工作原理。 3. 了解网络操作系统的基...详情>>