﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-最爱Java-随笔分类-Struts2</title><link>http://www.blogjava.net/zhengzhili/category/46735.html</link><description>书山有路勤为径，学海无涯苦作舟</description><language>zh-cn</language><lastBuildDate>Mon, 08 Nov 2010 14:25:02 GMT</lastBuildDate><pubDate>Mon, 08 Nov 2010 14:25:02 GMT</pubDate><ttl>60</ttl><item><title>Struts2学习笔记 —— 上传和下载</title><link>http://www.blogjava.net/zhengzhili/archive/2010/11/07/337455.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Sun, 07 Nov 2010 06:19:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2010/11/07/337455.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/337455.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2010/11/07/337455.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/337455.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/337455.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp; Struts2默认使用Jakarta的Common-FileUpload的文件上传解析器。见struts.properties配置文件中：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#指定使用COS的文件上...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2010/11/07/337455.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/337455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2010-11-07 14:19 <a href="http://www.blogjava.net/zhengzhili/archive/2010/11/07/337455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2学习笔记——输入校验（二）</title><link>http://www.blogjava.net/zhengzhili/archive/2010/10/24/336024.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Sun, 24 Oct 2010 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2010/10/24/336024.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/336024.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2010/10/24/336024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/336024.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/336024.html</trackback:ping><description><![CDATA[<p>
&nbsp;&nbsp;&nbsp; 对于login方法的校验，可以通过&lt;ActionClassName&gt;-&lt;ActionAliasName&gt;-validation.xml文件来校验，即RegistAction-login-validation.xml文件进行校验。同时，RegistAction-validation.xml的校验规则仍旧对login方法有效。即login方法的校验规则是Region-validation.xml和RegistAction-login-validation.xml的总和。<br />
&nbsp;&nbsp;&nbsp; 如果RegistAction继承了BaseAction，那么对于BaseAction类的校验规则也会被RegistAction类所继承校验。具体来说，其校验规则的搜索文件规则如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BaseAction-validation.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;BaseAction-别名-validation.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RegistAction-validation.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;RegistAction-别名-validation.xml</p>
<p>&nbsp;&nbsp;&nbsp; 对于Struts2所支持的内建校验器，我们可以通过xwork.2.1.2.jar中的com/opensymphony/xwork2/validator/validators/default.xml文件查看。</p>
<p>&nbsp;&nbsp;&nbsp; 除了配置文件，Struts2也支持Annotation。下面就是使用Annotation配置的RegistAction:</p>
<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: rgb(0, 0, 0);">@Validation()<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />public&nbsp;class&nbsp;RegistAction&nbsp;extends&nbsp;ActionSupport&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;long&nbsp;serialVersionUID&nbsp;=&nbsp;-2113900523366315993L;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;//该请求包含的4个请求参数<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;name;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;pass;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;age;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Date&nbsp;birth;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getName()&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;name;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@RequiredStringValidator(type=ValidatorType.FIELD,key="name.required",message="")<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@RegexFieldValidator(type=ValidatorType.FIELD,expression="\\w{4,25}",key="name.regex",message="")<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setName(String&nbsp;name)&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;name;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getPass()&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pass;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@RequiredStringValidator(type=ValidatorType.FIELD,key="pass.required",message="")<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@RegexFieldValidator(type=ValidatorType.FIELD,expression="\\w{4,25}",key="pass.regex",message="")<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setPass(String&nbsp;pass)&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.pass&nbsp;=&nbsp;pass;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getAge()&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;age;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@IntRangeFieldValidator(message="",key="age.range",min="1",max="150")<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setAge(int&nbsp;age)&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.age&nbsp;=&nbsp;age;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Date&nbsp;getBirth()&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;birth;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@DateRangeFieldValidator(message="",key="birth.range",min="1900/01/01",max="2050/01/21")<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setBirth(Date&nbsp;birth)&nbsp;{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.birth&nbsp;=&nbsp;birth;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />}<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; 对于不能通过内置校验器进行校验的逻辑，则可通过重写validate()方法来实现。如果一个Action中存在多个逻辑处理，则需要通过validateXxx()方法来分别进行校验，其中Xxx代表方法名。如login()方法对应的校验方法为validateLogin()。</p>
<p>&nbsp;&nbsp;&nbsp; Struts2的输入校验流程：</p>
<p>&nbsp;&nbsp;&nbsp; 1。类型转换器负责对字符串的请求参数执行类型转换，并将这些值设置成Action的属性值。</p>
<p>&nbsp;&nbsp;&nbsp; 2。在执行类型转换过程中，如果发生异常，则将异常保存到ActionContext中，并由conversionError拦截器负责将其封装到fieldError里。然后执行第3步；如无异常，直接执行第3步。</p>
<p>&nbsp;&nbsp;&nbsp; 3。调用Struts2内置的输入校验规则进行输入校验</p>
<p>&nbsp;&nbsp;&nbsp; 4。通过放射调用validateXxx()方法。</p>
<p>&nbsp;&nbsp;&nbsp; 5。调用validate()方法。</p>
<p>&nbsp;&nbsp;&nbsp; 6。如果上述都未发生fieldError，将调用Action里处理用户请求的处理方法；如果出现了fieldError，则转入input逻辑视图所指定的视图资源。
</p>
<img src ="http://www.blogjava.net/zhengzhili/aggbug/336024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2010-10-24 15:35 <a href="http://www.blogjava.net/zhengzhili/archive/2010/10/24/336024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2学习笔记——输入校验（一）</title><link>http://www.blogjava.net/zhengzhili/archive/2010/10/24/336019.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Sun, 24 Oct 2010 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2010/10/24/336019.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/336019.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2010/10/24/336019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/336019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/336019.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp; Struts2提供了基于验证框架的输入校验，在这种校验方式下，所有的输入校验只需要通过指定的配置文件即可。Struts2中每个Action都有一个校验文件，其规则为：&lt;Action名字&gt;-validation.xml。如：Code highlighting produced by Actipro CodeHighlighter (freewar...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2010/10/24/336019.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/336019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2010-10-24 15:01 <a href="http://www.blogjava.net/zhengzhili/archive/2010/10/24/336019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>