`
tou3921
  • 浏览: 68009 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Struts2的一些小总结(转载+补充)

阅读更多

 

Ognl表达式注意事项

OGNL要结合struts标签来使用。由于比较灵活,也容易把人给弄晕,尤其是“%”“#”“$”这三个符号的使用。其中$广泛应用于EL中。

“#”符号有三种用途:

(1)、访问非根对象(struts中值栈为根对象)如OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

 名称

 作用

 例子

 parameters

 包含当前HTTP请求参数的Map

  #parameters.id[0]作用相当于request.getParameter("id")

 request

 包含当前HttpServletRequest的属性(attribute)Map

 #request.userName相当于request.getAttribute("userName")

 session

 包含当前HttpSession的属性(attribute)的Map

  #session.userName相当于session.getAttribute("userName")

 application

 包含当前应用的ServletContext的属性(attribute)的Map

 #application.userName相当于application.getAttribute("userName")

 

(2)、用于过滤和投影(projecting)集合,如: books.{?#this.price>35} 

books.{?#this.price>35}

(3)、构造Map,如: #{'foo1':'bar1', 'foo2':'bar2'} 

#{'foo1':'bar1', 'foo2':'bar2'}这种方式常用在给radioselectcheckbox等标签赋值上。如果要在页面中取一个map的值可以这样写:

<s:property value="#myMap['foo1']"/> 

<s:property value="#myMap['foo1']"/>

“%”符号的用途

“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。

这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。

“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。

这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval()功能,例如 :

var oDiv = eval("document.all.div"+index) 

var oDiv = eval("document.all.div"+index)

index变量为1时,语句就会被当作var oDiv = document.all.div1  var oDiv = document.all.div1来执行。%{}就是起这个作用。举例:

<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>  

<s:property value="#myMap['key1']"/>  

<s:url value="#myMap['key1']" />

<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>

<s:property value="#myMap['key1']"/>

<s:url value="#myMap['key1']"/>

上面的代码第2行会在页面上输出“value1”,而第3行则会输出"#myMap['key1']"这么一个字符串。 如果将第3行改写成这样:

<s:url value="%{#myMap['key1']}"/> 

<s:url value="%{#myMap['key1']}"/>

则输出为“value1”


这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签看不懂”(通常这些标签的值是被默认按字面值处理,如value属性的值)类似“#myMap['key1']”的语句时,就要用%{}来把这括进去,翻译一下了。

“$”有两种用途

(1)、在国际化资源文件中,引用OGNL表达式。

(2)、在Struts 2配置文件中,引用OGNL表达式:

<action name="saveUser" class="userAction" method="save">

<result type="redirect">listUser.action?msg=${msg}</result>

</action>

<action name="saveUser" class="userAction" method="save">   

<result type="redirect">listUser.action?msg=${msg}</result>

</action>

"$"EL表达式注意事项。

注意:不推荐使用EL表达式,因为已经有ognl表达式的强大功能了。

EL表达式不能用于用于struts2标签中。如<s:property value="${some}"/>
这样会报错。

EL表达式也可以结合循环标签使用。如:
<s:iterator value="signs">
<s:property value="signDate"/>
${signDate}
</s:iterator >
第二行于第三行效果相同。

最后重申:struts2后续版本对于EL的适应还是未知,故不推荐使用EL

Struts2session超时处理

这里采用strtus2的拦截器实现。

Struts2json

Struts2json插件,我个人不喜欢使用。故采用json-lib包。

使用json-lib时要返回json数据只需要在action方法内return null 就可以了。这种做法是以往struts2中保留下来的。也可以采用void 方法

Struts2-jQuery

Struts2的jquery插件,主要提供ajax功能,也可以使用jquery-ui。

官网上有详细的例子提供下载,足够学习了。

Struts2-Spring

Struts2spring集成时,受管理的action的作用于需要特别处理为request

并且要在web中配置两个spring的监听器,第一个是必须的,第二个是:当使用了Spring's DispatcherServlet以外的Servlet 2.4及以上的Web容器时(如使用JSFStruts),你需要在Web应用的'web.xml'文件中增加 javax.servlet.ServletRequestListener 定义,这在spring2.5文档里有明确说名。(spring2.5文档 3.4. Bean的作用域)

 <listener>

  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

 </listener>

 <listener>

<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

</listener>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics