- 浏览: 263409 次
- 来自: ...
文章分类
最新评论
-
zhangxin007:
CXF spring jaxws:endpoint jaxws:server 区别 与 关系 -
kashu1217:
請問一下您的代碼為什麼都貼二次?
struts2 异常处理 -
zhangzhimvp:
alert("1111");
struts 文件下载 -
zhangzhimvp:
引用
[img][/img][url][/url][img] ...
struts 文件下载 -
mousepc:
你好,我想问一下。如果Set集合是在另一个集合中的,没办法初始 ...
Struts2的类型转换器
学习strut2过程中,碰到一些问题,找了一些文章,转载如下:
1. 动态 Action:<action ../> 元素的一个前所未有的特性是,name 属性可以用通配符,class 和 method 属性中可以用 name 中的匹配参数,{0}/{1} 的形式。举两个例子说明:
① <action name="*Action" class="com.unmi.LoginRegistAction" method="{1}">
URL 是 registAction.action 时,会执行 LoginRegistAction 类实例的 regist() 方法
② <action name="*_*" class="actions.{1}Action" method="{2}">
URL 是 Book_save.action 时,会执行 actions.BookAction 类实例的 save() 方法
说明:{1},{2}是用来匹配 name 属性中的 *,这和正则表达式一样的,{0} 表示的完整的 name 属性值。这也是托 Struts2 的每请求产生新的 Action 的实例才能这么用的,试想一下,Struts1 是没法针对通配符来预先加载好所有的 Action 实例的。
可由此定义一个能用的 Action,<result> 里也能用参数。
<action name="*">
<result>/{1}.jsp</result>
</action>
2. 关于在 <action .../> 中使用通配符时的校验文件命名规则。校验文件的搜索规则是:
① <ActionClassName>-<ActionAliasName>-validation.xml <ActionAliasName> 为 name 属性值
② <ActionClassName>-validation.xml
同时有这两个文件时,后面的规则能与前面的规则叠加或覆盖,例如 ① 中有name域的校验,② 中有password域的校验,这两个文件同时存在 <ActionClassName>所在路径时,会同时校验name和password域。
例如对于 <action name="*Action" class="com.unmi.LoginRegistAction" method="{1}">
URL 是 registAction.action 时,会搜索校验文件 LoginRegistAction-registAction-validation.xml 和 LoginRegistAction-validation.xml。
3. 使用通配符就会涉及到 URL 与哪个 Action 匹配的问题。例如匹配有name为 "*"、"*Action"、"LoginAction" 的 <action .../>,如果 URL 与某个 Action 的 name 完全相同(如 LoginAction.action),否则按顺序来匹配,而不是按匹配度来对应。如 abcAction.action 会匹配到 "*",而不是 "*Action"。
4. 可配置默认的 Action,URL 匹配不到对应的 Action 时就用它,用 <default-action-ref ../> 配置在 <package .../> 中。
5. Struts2 支持两种 <result ../>,配置在 <action .../> 中的局部 result,配置在 <global-results .../> 中的全局 result。<result .../> 默认的 name 属性是 "success";默认的 type 属性是 "dispatcher",即使 JSP 类型。
6. <result .../> type="plaintext" 的 <result .../> 会显示页面的源文件,如果其中有中文一般会产生乱码,这时候可设置它的 charSet 属性为 "GBK",用 <param .../> 标记。
7. <result .../> 的 dispatcher 和 redirect 类型的区别就是一个是转发(带请求参数、属性、址址栏不变)和重定向(丢失请求参数、属性、重新产生请求,所以地址栏会变)。
8. redirect-action 类型是重定(不是转发)向到一个 Action 上,那么要为 <result .../> 指定两个参数 actionName 和 namespace。简写为 <result name="..." rediect-action">actionName</result>。这种类型相当于在 Struts1 中的 <forward name="..." redirect="true">/anotherAction.do</forward> 写法。当然在 Struts2 中也可以用 redirect 类型写成相同的形式。
9. 动态结果资源有两种,根据 <action .../> 的 name 属性的模式匹配后的参数和请求参数决定结果。
① <action name="crud_*" class="com.unmi.CrudAction" method="{1}">
<result>/{1}.jsp</result>
</action>
URL 为 crud_delete.action 处理成功后会转到 delete.jsp 页。
② <action name="..." class="com.unmi.ShowAction">
<result>/show${user.type}</result>
</action>
要在 ShowAction 的设置了属性 ${user.type}。例如 ${user.type} 设置为 "admin",就会转到 showadmin.jsp 页。在Struts2中,可以在配置文件中通过ognl语法取得action中的属性,确实很强大。
10. Struts2 的 <result .../>、<global-result .../> 意义与效果完全对应于 Struts1 的 <forward .../>、<global-forward .../> 。
11. struts.i18n.encoding,这个属性就是struts2的编码方式,默认值是UTF-8
12.文件类型及错误输出:
Struts2提供了一个文件上传的拦截器(名为fileUpload),通过配置这个拦截器能轻松地实现文件类型的过滤。
在上例中,若要配置上传的文件只能是一些普通的图片文件格式:image/bmp、image/png、image/gif、image/jpeg、image/jpg等,则可在struts.xml文件中按如下方式配置:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messages"/>
<package name="fileUploadDemo" extends="struts-default">
<action name="fileUpload"
class="org.qiujy.web.struts2.FileUploadAction">
<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" />
<!-- 动态设置Action中的savePath属性的值 -->
<param name="savePath">/upload</param>
<result name="input">/index.jsp</result>
<result name="success">/showupload.jsp</result>
</action>
</package>
</struts>
如果上传文件失败,系统返回到input对应的页面,要在input对应的页面输出文件过滤失败信息,可以在input对应的页面中增加 <s:fielderror/>来显示错误信息。
3、在做上传文件的时候,要在web.xml中增加ActionContextCleanUp这个filter,如果不增加,会发生第一次上传取不到文件的情况
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
按照Struts2的API,filter的顺序是
struts-cleanup filter
SiteMesh filter
FilterDispatcher
<!-- 配置允许上传的文件大小,单位字节 -->
<param name="maximumSize">102400</param>
1. 动态 Action:<action ../> 元素的一个前所未有的特性是,name 属性可以用通配符,class 和 method 属性中可以用 name 中的匹配参数,{0}/{1} 的形式。举两个例子说明:
① <action name="*Action" class="com.unmi.LoginRegistAction" method="{1}">
URL 是 registAction.action 时,会执行 LoginRegistAction 类实例的 regist() 方法
② <action name="*_*" class="actions.{1}Action" method="{2}">
URL 是 Book_save.action 时,会执行 actions.BookAction 类实例的 save() 方法
说明:{1},{2}是用来匹配 name 属性中的 *,这和正则表达式一样的,{0} 表示的完整的 name 属性值。这也是托 Struts2 的每请求产生新的 Action 的实例才能这么用的,试想一下,Struts1 是没法针对通配符来预先加载好所有的 Action 实例的。
可由此定义一个能用的 Action,<result> 里也能用参数。
<action name="*">
<result>/{1}.jsp</result>
</action>
2. 关于在 <action .../> 中使用通配符时的校验文件命名规则。校验文件的搜索规则是:
① <ActionClassName>-<ActionAliasName>-validation.xml <ActionAliasName> 为 name 属性值
② <ActionClassName>-validation.xml
同时有这两个文件时,后面的规则能与前面的规则叠加或覆盖,例如 ① 中有name域的校验,② 中有password域的校验,这两个文件同时存在 <ActionClassName>所在路径时,会同时校验name和password域。
例如对于 <action name="*Action" class="com.unmi.LoginRegistAction" method="{1}">
URL 是 registAction.action 时,会搜索校验文件 LoginRegistAction-registAction-validation.xml 和 LoginRegistAction-validation.xml。
3. 使用通配符就会涉及到 URL 与哪个 Action 匹配的问题。例如匹配有name为 "*"、"*Action"、"LoginAction" 的 <action .../>,如果 URL 与某个 Action 的 name 完全相同(如 LoginAction.action),否则按顺序来匹配,而不是按匹配度来对应。如 abcAction.action 会匹配到 "*",而不是 "*Action"。
4. 可配置默认的 Action,URL 匹配不到对应的 Action 时就用它,用 <default-action-ref ../> 配置在 <package .../> 中。
5. Struts2 支持两种 <result ../>,配置在 <action .../> 中的局部 result,配置在 <global-results .../> 中的全局 result。<result .../> 默认的 name 属性是 "success";默认的 type 属性是 "dispatcher",即使 JSP 类型。
6. <result .../> type="plaintext" 的 <result .../> 会显示页面的源文件,如果其中有中文一般会产生乱码,这时候可设置它的 charSet 属性为 "GBK",用 <param .../> 标记。
7. <result .../> 的 dispatcher 和 redirect 类型的区别就是一个是转发(带请求参数、属性、址址栏不变)和重定向(丢失请求参数、属性、重新产生请求,所以地址栏会变)。
8. redirect-action 类型是重定(不是转发)向到一个 Action 上,那么要为 <result .../> 指定两个参数 actionName 和 namespace。简写为 <result name="..." rediect-action">actionName</result>。这种类型相当于在 Struts1 中的 <forward name="..." redirect="true">/anotherAction.do</forward> 写法。当然在 Struts2 中也可以用 redirect 类型写成相同的形式。
9. 动态结果资源有两种,根据 <action .../> 的 name 属性的模式匹配后的参数和请求参数决定结果。
① <action name="crud_*" class="com.unmi.CrudAction" method="{1}">
<result>/{1}.jsp</result>
</action>
URL 为 crud_delete.action 处理成功后会转到 delete.jsp 页。
② <action name="..." class="com.unmi.ShowAction">
<result>/show${user.type}</result>
</action>
要在 ShowAction 的设置了属性 ${user.type}。例如 ${user.type} 设置为 "admin",就会转到 showadmin.jsp 页。在Struts2中,可以在配置文件中通过ognl语法取得action中的属性,确实很强大。
10. Struts2 的 <result .../>、<global-result .../> 意义与效果完全对应于 Struts1 的 <forward .../>、<global-forward .../> 。
11. struts.i18n.encoding,这个属性就是struts2的编码方式,默认值是UTF-8
12.文件类型及错误输出:
Struts2提供了一个文件上传的拦截器(名为fileUpload),通过配置这个拦截器能轻松地实现文件类型的过滤。
在上例中,若要配置上传的文件只能是一些普通的图片文件格式:image/bmp、image/png、image/gif、image/jpeg、image/jpg等,则可在struts.xml文件中按如下方式配置:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messages"/>
<package name="fileUploadDemo" extends="struts-default">
<action name="fileUpload"
class="org.qiujy.web.struts2.FileUploadAction">
<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" />
<!-- 动态设置Action中的savePath属性的值 -->
<param name="savePath">/upload</param>
<result name="input">/index.jsp</result>
<result name="success">/showupload.jsp</result>
</action>
</package>
</struts>
如果上传文件失败,系统返回到input对应的页面,要在input对应的页面输出文件过滤失败信息,可以在input对应的页面中增加 <s:fielderror/>来显示错误信息。
3、在做上传文件的时候,要在web.xml中增加ActionContextCleanUp这个filter,如果不增加,会发生第一次上传取不到文件的情况
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
按照Struts2的API,filter的顺序是
struts-cleanup filter
SiteMesh filter
FilterDispatcher
<!-- 配置允许上传的文件大小,单位字节 -->
<param name="maximumSize">102400</param>
发表评论
-
Apache CXF开发Web Service 理解CXF Frontends之Code-First
2013-03-05 17:28 0CXF目前是 apache下面的一个顶级开源项目, C ... -
Hibernate和IBatis对比
2013-03-05 11:11 3200iBATIS数据映射器iBATIS被广泛认为是最简单的一种持 ... -
Hibernate二级缓存详解
2013-03-05 09:53 945Hibernate二级缓存详解 与Session相对的是, ... -
Struts 2 Hibernate Validation Tutorial
2013-03-01 15:40 1640The Hibernator Validator frame ... -
SiteMesh 过滤不装饰的页面
2013-03-01 11:49 6188要实现SiteMesh过滤不装饰页面,需要做两方面的设置1、 ... -
SiteMesh 2.X版本的简单使用
2013-03-01 11:28 1624SiteMesh 2.X版本的简单使用 1. ... -
Hibernate抓取策略以及如何避免cannot simultaneously fetch multiple bags异常
2013-02-28 16:28 1093在说解决cannot simultaneously fetc ... -
Struts2 json 不熟悉序列号 @JSON(serialize=false)
2013-02-26 16:22 1406JSON注释还支持如下几个域:name:指定Action属 ... -
Struts2 json 不熟悉序列号 @JSON(serialize=false)
2013-02-26 16:22 1052避免使用get开头的action方法 在属性get方法上面加 ... -
struts2学习:配置篇之namespace
2013-02-26 11:34 734把namespace单独拉出来讲一方面是因为它实际上不是一个 ... -
Struts2.1.6 部署 jboss6.0 报错
2013-02-21 10:58 9312010-03-01 22:43:52,546 ERROR ... -
MyEclipse反向工程异常解决(转)
2012-09-11 11:28 743http://www.cnblogs.com/zhaozhi- ... -
DynamicMethodInvocation 动态方法调用
2009-07-24 16:06 2059<constant name="struts. ... -
struts2 必须的6个包
2009-07-23 17:42 859commons-logging-1.0.4.jarfr ... -
struts1.2 spring 集成
2008-07-23 14:41 3912转载IBM上一篇文章:http://www.ibm.com/d ... -
struts2 拦截器
2008-07-21 16:43 1621转载于:http://blog.csdn.net/feng_s ... -
struts 文件下载
2008-07-21 15:56 3698最近用到了struts2的文件下载,找了些网上关于下载的文章, ... -
Struts2的类型转换器
2008-07-17 15:25 5911转贴 http://aumy2008.iteye.com/bl ... -
struts2 异常处理
2008-07-17 12:23 8292在学习struts2的过程中,想到了struts1的错误处理机 ... -
struts 多模块开发
2008-07-15 14:58 1328struts1.1开始支持多模块的. 多模块开发是为了解决 ...
相关推荐
struts2学习测试代码,struts2学习测试代码2struts2学习测试代码,struts2学习测试代码
这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用
Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...
本人在网上收集的struts2 的学习资料,包括:struts2权威指南、struts2标签简单说明、struts2中文教程。
struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!
Struts2学习笔记,介绍了struts2的基础部分
struts2学习笔记总结
STRUTS2学习文档,如果你想花最少的时间来获取对struts2 的最大了解程度,则它将是你最好 的选择.
STRUTS2站点,STRUTS2学习实例8
struts2学习心得,总结了struts2的常用方法,经验
struts2学习测struts2学习测试代码试代码
STRUTS2学习文档.pdf 对Struts2的一些配置文件进行了详细的说明。 Struts2―表单验证validate(html)对validate的type属性校验类型以及param 做了详细的解释说明。 struts2和struts的比较 让你更清楚的知道struts2...
Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来...学习完本视频,你会真正理解Struts2相对于Struts1的优雅和简洁,并使你具备开发Struts2项目的能力。
struts 初步认识Struts2并部署验证 struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter ...
struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...
struts 2完全学习手册
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
struts2学习系列文章,包括1 action访问,2 配置,3 获取servlet容器等
struts2学习ppt