`

Struts2学习笔记

阅读更多

近段时间学习了Struts2,下面是学习实践过程中记录的一些东西。

页面视图与Action之间的数据传输
1 对于Action里面的属性,可以直接使用<s:property value="userName" />进行访问。
2 对于Action里面返回的数据库中的数据,可以在Action中实现ServletRequestAware接口,在action里面调用request.setAttribute("user", user); 在页面上使用<s:property value="#request.user.userName" />进行访问user中的数据。

文件上传
1 <constant name="struts.multipart.saveDir" value="/tmp" />
2 Struts2针对表单中名为xxx的文件域,在对应的Action类中使用3个属性来封装该文件域信息:
类型为File的xxx属性:用来封装页面文件域对应的文件内容。
类型为String的xxxFileName属性:用来封装该文件域对应的文件的文件名。
类型为String的xxxContentType属性:用来封装该文件域应用的文件的文件类型。
3 Action里面配置
具体的配置和错误提示配置可以参考Struts2 api文档。
<interceptor-ref name="fileUpload">
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png, image/pjpeg
</param>
<param name="maximumSize">102400</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />

访问Request, Response, Session, Application, Parameters, Cookies
1 可以通过ActionContext.getContext()来访问Application, Session, Parameters等。
2 可以通过实现ServletRequestAware, ServletResponseAware, SessionAware, ApplicationAware, ParameterAware, CookiesAware 等进行访问 Request, Response, Session等的访问.

国际化支持
1 配置文件中加载资源文件<constant name="struts.custom.i18n.resources" value="message" />,
文件命名方式:
l baseName_language_country.properties
l baseName_language.properties
l baseName.properties
2 在页面显示时调用<s:text name="message key" />
在Action中访问资源,可以使用getText("");如果带参数可以使用getText("", new String[]{userName});

FieldError & ActionError
Action类通过拓展ActionSupport类,可以实现validate表单验证方法。
在页面显示错误时:使用<s:fielderror/> <s:actionerror/>

一个Action中支持多个方法的调用配置
1、简单的Action配置
<action name="logon" class="tutorial.Logon">
<result type="redirect-action">Menu</result>
<result name="input">/tutorial/Logon.jsp</result>
</action>

2、在开发中通常将多个方法写在一个action中,对于这样action可以采用集中配置方式
一个方法一个action配制 <action name="delete" class="example.CrudAction" method="delete">

通配符方式
<action name="*Crud" class="example.Crud" method="{1}">
<action name="crud_*" class="example.Crud" method="{1}">
<action name="crud!*" class="example.Crud" method="{1}">

url pattern: /{model}/{method}.action
/User/add.action” 调用User的add方法
<action name=”*/*” method=”{2}” class=”com.infoq.actions.{1}Action”>
<result type=”redirect”>/{1}/view.action</result>
<result name=”view”>/{1}/view.jsp</result>
<result name=”input”>/{1}/edit.jsp</result>
<result name=”home”>/{1}/home.jsp</result>
</action>

表单验证 ---开发者应该以最坏的打算来面对浏览者的输入
表单验证分为客户端验证和服务器验证,客户端验证主要是过滤正常用户的操作,主要通过JavaScript代码完成;服务器验证是整个应用阻止非法数据的最后防线,主要通过在应用中编程实现。
Struts表单验证:一种是实现ActionSupport的validate方法,也可为Action中是方法指定验证方法,如为Action中的register()方法指定validateRegister()方法,那么请求register时会使用validateRegister进行验证;还有一种是编写验证规则文件,可以为每个Action都指定一个验证规则文件,文件命名为"Action类名-[方法名-]validation.xml",保存在与Action Class相同的路径下,在视图页面指定form的validate=true。Struts2提供了多种类型内置的验证器,如required, requiredstring, int, double, date, expression, fieldexpression, email, url, visitor, conversion, stringlength, regex.
以下为一例
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>You must enter a name</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">13</param>
<param name="max">19</param>
<message>Only people ages 13 to 19 may take this quiz</message>
</field-validator>
</field>
</validators>

拦截器
拦截器的配置:
相关的元素有
<interceptors../>用于定义拦截器,该元素下包含<interceptor../> <interceptor-stack../>
<interceptor../>用于定义拦截器,包含name和class两属性。
<interceptor-stack../>用于定义拦截器引用,该元素下包含多个<interceptor-ref../>。
<interceptor-ref../>引用一个拦截器或拦截器栈,有一个name属性,该元素可以作为<interceptor-stack../>和<action../>元素的子元素。
<param../>为拦截器指定参数,作为<interceptor-ref../>和<interceptor../>的子元素使用。

实现自定义拦截器:(拦截Action类的所有方法)
如需开发自己的拦截器类,需实现com.opensymphony.xwork2.interceptor.Interceptor接口或实现AbstractInterceptor类。

方法过滤:(继承MethodFilterInterceptor类,实现doIntercept(ActionInvocation invocation) )
该拦截器有两个可选配置参数:excludeMethods和includeMethods来设置Action的哪些方法需要拦截,哪些方法不需要拦截,方法间用","号分隔。

标签库
iterator标签迭代List中的List
<s:iterator value="categorys" id="cate">
<s:property value='name'/> -- <s:property value='id'/>"
<s:iterator value="#cate.products">
( <s:property value="name"/> -- <s:property value="id"/> )
</s:iterator>
</s:iterator>
1. value属性:可选的属性,value属性是指一个被迭代的集合,使用ognl表达式指定,如果为空的话默认就是ValueStack栈顶的集合.
2.id属性:可选属性, 是指集合元素的id
3.status属性:可选属性,该属性在迭代时会产生一个IteratorStatus对象,该对象可以判断当前元素的位置,包含了以下属性方法:
int getCount(); 迭代元素个数
int getIndex(); 迭代元素当前索引
boolean getFirst(); 是否为第一个
boolean getEven(); 是否为偶
boolean getLast(); 是否最后一个
bolean getOdd(); 是否为奇
由于iteratorstatus对象并不是ognl的根对象因此访问需要加上 #访问如下例子:
<s:iterator value=”{’dd’,'bb’,'cc’}” status=”st”>
<s:if test=”#st.odd”>
<s:property value=”#st.index”/>
</s:if>
</s:iterator>


ONGL表达式:
支持对象方法调用,如xxx.doSomeSpecial();
支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;

“#”主要有三种用途:
访问OGNL上下文和Action上下文,#相当于ActionContext.getContext()
用于过滤和投影(projecting)集合,如books.{?#this.price<100};
构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。

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

“$”有两个主要的用途
1. 用于在国际化资源文件中,引用OGNL表达式,如:validation.require=${getText(fileName)} is required
2. 在Struts 2配置文件中,引用OGNL表达式,如:<result type="redirect">ListPhotos.action?albumId=${albumId}</result>

集合操作:
除了in和not in之外,OGNL还允许使用某个规则获得集合对象的子集,常用的有以下3个相关操作符。
?:获得所有符合逻辑的元素。
^:获得符合逻辑的第一个元素。
$:获得符合逻辑的最后一个元素。
如:person.relatives.{? #this.gender == 'male'} 该代码可以获得person的所有性别为male的relatievs集合。

分享到:
评论

相关推荐

    struts2学习笔记(完美总结)——转自OPEN经验库

    struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!

    struts2学习笔记总结

    struts2学习笔记总结

    struts2学习笔记

    struts2学习笔记struts2学习笔记struts2学习笔记

    struts2学习笔记3数据类型转换

    struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换

    struts2学习笔记.doc

    本人学习struts2的笔记,希望大家可以多多学习以后共同交流

    struts2学习笔记(1)

    1. struts2框架的引入 1)把struts2的相关jar包导入到项目中去 2)把struts2框架的配置文件struts.xml复制粘贴到项目中的src下面(同时也可以把log4j.properties放到src下) 在这里我们主要是要的这个struts.xml文件...

    struts2学习笔记(详细文字)

    structs2很详细的学习笔记,structs2的建造,工作原理,例子,逐步讲解,纯文字的

    Struts2 学习笔记

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...

Global site tag (gtag.js) - Google Analytics