Struts2 OGNL valueStack琐碎总结

总结一:

ActionContextAction的资源环境,每一次Action请求都会创建一个新的ActionContext,并且每一个ActionContext都是不同的(一次Action请求完毕,对应的ActionContext即销毁。但是,如果请求是在两个action之间转发而不是重定向,则任然用的是同一个ActionContext对象)。

ActionContext中包含:requestsessionapplicationparametervalueStack等元素

总结二:

OGNLObject Graph Navigation Language对象图导航语言):在struts2主要用在JSP页面结合struts2自定义标签库访问OGNL Context中的数据,而在struts2中,OGNLcontext即为ActionContext,其中ActionContext中的valueStackOGNL context根对象OGNL context结构示意图如下:

总结三:

ValueStack中的数据:每一次Action请求后,action的拦截器(比如ModelDriven interceptor Parameter Interceptor等)都会根据用户传递的参数在ValueStack的栈顶存放一定的数据。一般情况下,valueStack栈顶存放的是当前Action对象本身,这样就可以在jsp页面中直接访问该Action对象的成员属性了(如user.name)。另外,如果此Action实现了ModelDriven接口,则放置于栈顶的将不再是Action对象本身了,而是此Action中设定的成员变量:model对象(getModel方法中返回的model对象)。然后,在此model对象下面才是action对象。

ValueStack中(栈顶)的数据一个很重要的作用就是用作struts2自定标签的回显功能,因为struts2的自定义标签可以自动获取valueStack中具有相同name属性的数据,并显示在JSP页面上,主要用在form表单中的textFieldtextAreaselectcheckboxlistradioform标签的回显(jsp的标签库是没有这一回显功能的)。所以,有时候Action的作用就是 往值栈valueStack中准备一定的数据,供跳转后的页面回显(如:在编辑用户资料的时候,需要在页面上回显该用户原有的数据)。

总结四:

几种特殊字符在OGNL表达式中的应用:

1# :

. #request.user<=>#user ,等价,可以省略request限定。其他情况(如sessionapplicationparameters等),都不能省略范围限定;

. 构造Map并放置于valueStack栈顶,如#{'foo1':'bar1', 'foo2':'bar2'}

.用作投影(不常用);

2%{user}:只能用在struts2的自定义标签库的属性中,不能用在其他的地方。在struts2的自定义标签库的属性(如:value属性)中,有些是接受String,有些是接受Object类型,为了能让改属性(如:value属性)的值能通过OGNL获得,就必须用%{},如

JSP 页面:

<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}"/>

不使用%:<s:url value="#foobar['foo1']"/>

使用%:<s:url value="%{#foobar['foo1']}"/>

结果显示:

不使用%#foobar['foo1']

使用%bar1

3$ {}:

. 用于在国际化资源文件中,引用OGNL表达式;

. Struts 2配置文件中,引用OGNL表达式,如

<action name="AddPhoto" class="addPhoto">

<result type="redirect">

ListPhotos.action?albumId=${albumId}

</result>

</action>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值