macoo

记录收获的点点滴滴

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

这个图很直白的说明了struts2 上下文 ActionContext中各个对象的逻辑关系:

                      |--application

                      |

                      |--session

context map---|

                      |--value stack(root)

                      |

                      |--request

                      |

                      |--parameters

                      |

                      |--attr (searches page, request, session, then application scopes)

Struts2中上下文为ActionContext,根元素位Value Stack(值堆栈,值堆栈代表了一族对象而不是一个对象,其中Action类的实例也属于值堆栈的一个)。

 

因为Action实例被放在Value Stack中,而Value Stack又是根元素(root)中的一个,所以对Action中的属性的访问可以不使用标记#,而对其他的访问都必须使用#标记。

引用Action的属性

<s:property value="postalCode"/>

ActionContext中的其他非根(root)元素的属性可以按照如下的方式访问:

<s:property value="#session.mySessionPropKey"/> or

<s:property value="#session["mySessionPropKey"]"/> or

<s:property value="#request["mySessionPropKey"]/>

Action类可以使用ActionContext中的静态方法来访问ActionContext。

ActionContext.getContext().getSession().put("mySessionPropKey", mySessionObject);

 

生成List的语法为: {e1,e2,e3}.

<s:select label="label" name="name" list="{'name1','name2','name3'}" value="%{'name2'}" />

 

生成Map的语法为:#{key1:value1,key2:value2}.

<s:select label="label" name="name" list="#{'foo':'foovalue', 'bar':'barvalue'}" />

 

 

 

 

  判断一个对象是否在List内存在:

<s:if test="'foo' in {'foo','bar'}">

   muhahaha

</s:if>

<s:else>

   boo

</s:else>

<s:if test="'foo' not in {'foo','bar'}">

   muhahaha

</s:if>

<s:else>

   boo

</s:else>

 

 

 

  取得一个List的一部分:

  ? – 所有满足选择逻辑的对象

  ^ -   第一个满足选择逻辑的对象

  $ -   最后一个满足选择逻辑的对象

例如:

person.relatives.{? #this.gender == 'male'}

上述代码取得这个人(person)所有的男性(this.gender==male)的亲戚(relatives)

 

 

posted on 2010-02-02 13:11  macoo  阅读(523)  评论(0)    收藏  举报