当前位置: 代码迷 >> Web前端 >> Struts2+Web常运用的功能经验笔记第1季-1
  详细解决方案

Struts2+Web常运用的功能经验笔记第1季-1

热度:417   发布时间:2012-11-05 09:35:12.0
Struts2+Web常使用的功能经验笔记第1季--1

1.?????? 前言

ApacheStruts2已经是很流行的MVC Web框架了,很多Web开发人员都是使用它做为Web框架。它是在 struts WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2Struts 1有着太大的变化,但是相对于WebWorkStruts 2只有很小的变化。像Struts2的常用配置功能笔者就不在说了,在此结合作者的Web相关技术(Struts2JSTLEL……)使用经验做个总结,希望与您有个共鸣。

2.?????? 判断标签<s:if>

当在request域里面的对象需要判断的时候,可以选用<s:if>,当然Struts2的所有标签都必须在一个Action转向后才能使用的,直接访问一个JSP就使用Struts2的标签,报错。

例如:

<s:if test="%{#session.customer==null}">

??? <A class=buy-btn href="#" title="登录才能抢购">抢购</A>

</s:if>

<s:if test="%{#session.customer!=null}">

??? <A class=buy-btn

??? ??? href="proAction!buyProductBefor.action?products.id=${products.id}"

?????? title="登录才能抢购">抢购</A>

</s:if>

?

3.?????? 在页面中访问变量(#%$

OGNL是通常要结合Struts 2的标志一起使用。主要是#%$这三个符号的使用。

一般使用JSP内置对象域的变量的时候(applicationsessionrequestparameters)都需要使用Struts标签+#来进行访问,一般用于访问Session里面的变量。

例如:

<s:if test="%{#session.customer!=null}">

或者

<s:property value="%{#application.myApplicationAttribute}" />
<s:property value="%{#session.mySessionAttribute}" />
<s:property value="%{#request.myRequestAttribute}" />
<s:property value="%{#parameters.myParameter}" />

Struts2标签中访问内置对象的变量的时候前面得用%{}将变量括起来。

?

如果在Action中被注入的对象在ValueStack域中的时候,在页面中可以直接采用el表达式来访问变量。

例如:

<TD><STRONG class=original>${products.sourcePrice}</STRONG></TD>

?

如果变量显示的在Action中直接赋值(set)给了requestsession域中后,在页面也可以直接使用el表达式来进行访问,但是这里仅仅只是显示,并不能在Struts2标签中判断、计算等。代码如下。

你好,${session.customer.name}

?

一般Struts2标签要配合OGNL表达式一齐使用,包括一些运算、判断、取子字符串等等。在此引用别人博客(http://www.iteye.com/problems/51144)上的一段话

“#”主要有三种用途:
1.
访问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")

?

Attr:用于按request > session > application顺序访问其属性(attribute

#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止

2.用于过滤和投影(projecting)集合,如books.{?#this.price<100}
3.
构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}


“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。

“$”有两个主要的用途,用于在国际化资源文件中,引用OGNL表达式。在Struts 2配置文件中,引用OGNL表达式。

?

4.?????? JSTL格式化数字

一般用到整数、小数格式化的时候可以直接用JSTL来处理。

使用jstlfmt标签可以对页面的值进行格式化、国际化显示等功能。

引入标签:<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

保留整数,小数后一位永远是0

<fmt:formatNumber value="${(products.nowPrice/products.sourcePrice)*10}" pattern="#.0" /> </STRONG>

保留两位小数

<!--保留2位小数点,格式化数字-->

<STRONG>£¤<fmt:formatNumber value="${products.sourcePrice-products.nowPrice}" pattern="#.##" minFractionDigits="2" /></STRONG>

?

读取资源文件

<fmt:message key="global.add" />

?

?

5.?????? Struts2日期标签格式化日期

代码如下

<TD class=order-num>

<s:date name="#orderProductListVar.orders.orderDate" format="yyyy-MM-dd HH:mm:ss" />

</TD>

显示出来得值就是2011-01-10 21:09:26

?

6.?????? 利用Struts2错误标签显示Action中显示发生的错误

<s:fielderror>

??? <s:param>errorMessage</s:param>

</s:fielderror>

其中errorMessageAction中错误域中的key

?

7.?????? 利用Struts2标签得到字符串长度和截取子字符串

<!--判断字符串长度-->

<s:if test="%{#productsListVar.productMess.length()>=40}">

??? <s:property value="#productsListVar.productMess.substring(0,40)" />...

</s:if>

<s:else>

??? <s:property value="#productsListVar.productMess" />

</s:else>

?

  相关解决方案