ActionContext和OGNL

使用struts2时,我们一般使用ognl表达式将表单字段绑定到对象中的具体属性。已知对象一般被放在一个叫做valuestack的对象上,并且ognl表达式指向这个栈上的属性。实际上,ognl表达式可以根据任何一系列对象求值,而ValueStack只是这些对象中的一个,即默认的那个。

         

            这一系列的可以让ognl表达式取值的对象,叫做ActionContext,struts2幕后一个非常重要的角色。它包含有默认的ValueStack对象,paramters对象,application对象,session对象,attr对象和request对象,而其中最重要最常用的也就是Valuestack对象,所以设计者将它设置为默认取值对象。

 

           假使ActionContext中存在着一个user的对象,若是默认存在于ValueStack中的话,我们用jsp的标签${}去取值,即${user};假使用struts的%转义字符去取值,即%{user}。这是默认的,假如它存在于session中,那么你该使用#session['user']去取值,#操作符会主动命名ActionContext中的session对象,即拿到session的对象,再去取值它下面的user的值。

 

            回到默认的ValueStack对象,它只有一个微妙的地方,当ognl表达式根据Valuestack解析时,它装作一个对象。这个虚拟对象包含了放在上面的所有对象的所有属性。如果相同的属性多次出现且无层次,主次分别的话,栈下面的对象的属性会被栈上层的同名同级属性覆盖,而valuestack正是压入式的存放的对象属性的。

 

            ognl使用%而不是$,虽然这看起来让很多jsp老手时常感到困惑,但是值得放心的是所属的ognl的%转义字符并不是常常用到,由于标签的智能默认行为,jsp标签的$和ognl的%通常是可以统一的,而#操作符,则更好理解,你可以把它跟$和%区分开,单独理解为,它是定位符,定位到Actioncontext中的6个对象中的某一个进而重命名,以获取存放在里面的对象属性。

你可能感兴趣的:(ActionContext和OGNL)