﻿<?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-Focus on java, CSS and beyond-文章分类-struts2</title><link>http://www.blogjava.net/kelven/category/41990.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 07 Oct 2009 12:11:36 GMT</lastBuildDate><pubDate>Wed, 07 Oct 2009 12:11:36 GMT</pubDate><ttl>60</ttl><item><title>struts2 Annotation 之字段验证</title><link>http://www.blogjava.net/kelven/articles/297346.html</link><dc:creator>kelven.lee</dc:creator><author>kelven.lee</author><pubDate>Wed, 07 Oct 2009 00:46:00 GMT</pubDate><guid>http://www.blogjava.net/kelven/articles/297346.html</guid><wfw:comment>http://www.blogjava.net/kelven/comments/297346.html</wfw:comment><comments>http://www.blogjava.net/kelven/articles/297346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kelven/comments/commentRss/297346.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kelven/services/trackbacks/297346.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;">struts2 annotation 技术来做 validation<br />
1、</span>在action头部写入<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">@Validation<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;TestAction&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;BaseActionSupport&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;ModelDriven</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">LoginForm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">,&nbsp;Preparable{<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">}</span></div>
2、在需要执行的方法上面写入以下代码，通过验证的则执行方法体内的函数，没通过校验，怎跳出，返回错误信息<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">@Validations(requiredStrings&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{@RequiredStringValidator(type&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ValidatorType.SIMPLE,&nbsp;fieldName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">info.username</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;message&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">名称是必须的.</span><span style="color: #000000;">"</span><span style="color: #000000;">)})</span></div>
注：根据具体需求进行不同的校验<br />
3、不需要验证的方法上面标示<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">@SkipValidation</span></div>
4、如果返回错误，页面上接受的错误信息，已第2为例<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;</span><span style="color: #000000;">s:fielderror&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">username</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;&lt;/</span><span style="color: #000000;">s:fielderror</span><span style="color: #000000;">&gt;</span></div>
<br />
<img src ="http://www.blogjava.net/kelven/aggbug/297346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kelven/" target="_blank">kelven.lee</a> 2009-10-07 08:46 <a href="http://www.blogjava.net/kelven/articles/297346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 Annotation之返回类型</title><link>http://www.blogjava.net/kelven/articles/297336.html</link><dc:creator>kelven.lee</dc:creator><author>kelven.lee</author><pubDate>Tue, 06 Oct 2009 16:30:00 GMT</pubDate><guid>http://www.blogjava.net/kelven/articles/297336.html</guid><wfw:comment>http://www.blogjava.net/kelven/comments/297336.html</wfw:comment><comments>http://www.blogjava.net/kelven/articles/297336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kelven/comments/commentRss/297336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kelven/services/trackbacks/297336.html</trackback:ping><description><![CDATA[<strong><font color="#333333">Resules的Annotation定义</font></strong>
<p><strong><font color="#333333">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们只需要在Action Class的类的前面加上@Result即可以定义Action的跳转</font></strong></p>
<p><strong><font color="#333333">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如:</font></strong></p>
<p><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></strong></p>
<div>
<ol><font color="#0000ff">
    <li><strong>@Results</strong><strong>({</strong></li>
    <li><strong>&nbsp;&nbsp;&nbsp;</strong><strong>@Result</strong><strong>(name=</strong><strong>"input"</strong><strong>&nbsp;value=</strong><strong>"/input.jsp"</strong><strong>&nbsp;type=NullResult.</strong><strong>class</strong><strong>),</strong></li>
    <li><strong>&nbsp;&nbsp;&nbsp;</strong><strong>@Reuslt</strong><strong>(name=</strong><strong>"success"</strong><strong>&nbsp;value=</strong><strong>"/success.jsp"</strong><strong>&nbsp;type=NullResult.</strong><strong>class</strong><strong>),</strong></li>
    <li><strong>&nbsp;&nbsp;&nbsp;</strong><strong>@Result</strong><strong>(name=</strong><strong>"error"</strong><strong>&nbsp;value=</strong><strong>"/error.jsp"</strong><strong>&nbsp;type=NullResult.</strong><strong>class</strong><strong>)</strong></li>
    <li><strong>})</strong></li>
    </font></ol>
    </div>
    <p><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#333333">上面是一个典型的多Result配置,name属性指定返回的字符串,value指定要跳转的页面,type指定Result的类型,type是一个很重要的属性,他有一下几种情况:</font></font></strong></p>
    <p><strong><font color="#0000ff"><font color="#333333">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">1)NullResult&nbsp; :</font> 默认的可以省略</font></font></strong></p>
    <p><strong><font color="#0000ff"><font color="#333333">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000">2)ActionChainResult :</font> 用于从一个Action跳转到另外一个Action</font></font></strong></p>
    <p><strong><font color="#0000ff"><font color="#333333">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如:</font></font></strong></p>
    <p><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></strong></p>
    <div>
    <ol><font color="#0000ff">
        <li><strong>@Result</strong></li>
        <li><strong>(name&nbsp;=&nbsp;</strong><strong>"search"</strong><strong>,value=&nbsp;</strong><strong>"search"</strong><strong>,type=ActionChainResult.</strong><strong>class</strong><strong>,</strong></li>
        <li><strong>params={</strong><strong>"method"</strong><strong>,</strong><strong>"search"</strong><strong>})</strong></li>
        </font></ol>
        </div>
        <p><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#333333">这个配置是如果返回值为"search"就跳转掉SearchAction的search方法,如果不指定params就跳转到SearchAction的execute方法</font></font></strong></p>
        <p><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#333333"><font color="#ff0000">3)StreamResult:</font>用于文件下载</font></font></strong></p>
        <p><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#333333">例如:</font></font></strong></p>
        <p><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></strong></p>
        <div>
        <ol><font color="#0000ff">
            <li><strong>@Result</strong></li>
            <li><strong>(name=</strong><strong>"success"</strong><strong>,value=</strong><strong>"inputStream"</strong><strong>,type=StreamResult.</strong><strong>class</strong><strong>,</strong></li>
            <li><strong>params={</strong><strong>"bufferSize"</strong><strong>,FileConstant.DOWNLOAD_BUFFER_SIZE})</strong></li>
            </font></ol>
            </div>
            <p><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#333333">作为Struts2的Annotation配置中最重要的Result配置大致有这几种情况,关于Struts2&nbsp; Annotation的其他配置我也不是十分了解,就以后在介绍吧!!!</font></font></strong></p>
<img src ="http://www.blogjava.net/kelven/aggbug/297336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kelven/" target="_blank">kelven.lee</a> 2009-10-07 00:30 <a href="http://www.blogjava.net/kelven/articles/297336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 Annotation 之配置</title><link>http://www.blogjava.net/kelven/articles/297335.html</link><dc:creator>kelven.lee</dc:creator><author>kelven.lee</author><pubDate>Tue, 06 Oct 2009 16:23:00 GMT</pubDate><guid>http://www.blogjava.net/kelven/articles/297335.html</guid><wfw:comment>http://www.blogjava.net/kelven/comments/297335.html</wfw:comment><comments>http://www.blogjava.net/kelven/articles/297335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kelven/comments/commentRss/297335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kelven/services/trackbacks/297335.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;">
<p>struts2 Annotation maven pom xml：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;groupId&gt;org.apache.struts&lt;/groupId&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;artifactId&gt;struts2-codebehind-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;version&gt;2.1.6&lt;/version&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;type&gt;jar&lt;/type&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;scope&gt;compile&lt;/scope&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/dependency&gt;</p>
<p>---------------------------------------<span style="font-size: 10pt;">-------------------------------------------------------------</span><span style="font-size: 10pt;">-------------------------------------------------------------</span></p>
<p>Struts2官方文档在讲述配置的时候，一开始就来了个&#8220;0配置&#8221;(Zero
Configuration)，大意就是说在struts应用中不使用任何xml文件或者properties文件，元数据(Metadate)都用通过
约定(convention)和注解(annotation)来表达的，而且这是struts2的一个新特性，目前仍在测试中，相关文档也很粗略。接下来
的一部分讲述的就是Annotation，我粗略的看了一下，估计它就是&#8220;0配置&#8221;的核心所在，我拿文档中最简单的一个例子来看一下：</p>
<pre>@Result(name="success", value="/home.page", type=TilesResult.class)</pre>
<pre>public class HomeAction extends ActionSupport {</pre>
<pre>&nbsp;&nbsp;&nbsp; // ...</pre>
<pre>}</pre>
<p>红
底的部分就是我们所说的Annotation，它说明这个当这个action返回值为&#8221;success&#8221;时页面就跳转值/home.pag，就相当于我们
在struts.xml中配置的result元素，采用了这个Annotiation之后我们就不用写配置文件了，实现了所谓的&#8220;0配置&#8221;。一般我们在配
置actio的时候都会出现多个result，这时Annotation就可以这么写：</p>
<pre>@Results({</pre>
<pre>&nbsp;&nbsp;&nbsp; @Result(name="success", value="/home.page", type=TilesResult.class),</pre>
<pre>&nbsp;&nbsp;&nbsp; @Result(name="homeError", value="/homeError.page", type=tilesResult.class)</pre>
<pre>})</pre>
<p>还有一个问题，如果没有配置文件我们如何知道去哪儿调用哪个action呢？为了完成这个功能我们需要这样配置web.xml文件：</p>
<pre>&lt;filter&gt;</pre>
<pre>&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;</pre>
<pre> &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;</pre>
<pre>&nbsp; &lt;init-param&gt;</pre>
<pre>&nbsp;&nbsp;&nbsp; &lt;param-name&gt;actionPackages&lt;/param-name&gt;</pre>
<pre>&nbsp;&nbsp;&nbsp; <span style="color: red;">&lt;param-value&gt;com.foo.bar,com.baz.quux&lt;/param-value&gt;</span> &lt;!--这里我们可以设置到com.kelven.action即可，命名空间以@namespace为准--&gt;</pre>
<pre>&nbsp; &lt;/init-param&gt;</pre>
<pre>&lt;/filter&gt;</pre>
<p>其实也没什么特殊的，就是给我们的Controller加了一个参数actionPackages，从字面上理解，Controller将会从com.foo.bar和com.baz.quux这两个包中去寻找action，具体的流程是这样的：</p>
<p>1．系统首先通过web.xml文件装载FilterDispatcher类，它要有actionPackages参数</p>
<p>2．FilterDispatcher会初始化一个Dispatcher，并传递actionPackages的值</p>
<p>3．Dispatcher会初始化一个ClasspathConfigurationProvider对象，用它来存放一个或多个Configuration Providers</p>
<p>4．Dispatcher给ConfigurationManager对象增加一个ClasspathConfigurationProvider来处理actionPackages参数</p>
<p>5．Someone会调用ClasspathConfigurationProvider的loadpackages方法</p>
<p>6．Loadpackages
会首先利用ResolverUtil从所列package(就是actionPackages参数的值)中找到所有实现了Action接口和名字带有
Action后缀的类，然后这些类会集中放入一个Set集合中，然后这个Set中的每个类都会被传递给processActionClass方法</p>
<p>7．processActionClass首先确定命名空间，然后捕捉任何ParentPackage和Results类型的Annotation，接着创建一个ActionConfig，设置action name，package name以及results。</p>
<p>步骤7获取action名字的规则是这样的：将action name从任何&#8220;Action&#8221;后缀前面截取掉，如果action name含有&#8220;/&#8221;的话，那么将最后一个&#8220;/&#8221;后面的第一个字母变为小写。还是举例来进行说明吧：</p>
<p>如果我们的actionPackages参数是<em>com.myapp.actions</em><em>，我们的Action类是</em><em>com.myapp.actions.</em><strong><em>member</em></strong><em>.EditAction</em>，那么我们可以通过下面的url来访问这个类：http://server/myapp/member/edit.action.也就是子包(subpackage)将成为namespace，而action类名将成为action name。如果类名有一个&#8220;Action&#8221;后缀，那么它将被去掉。</p>
<p>至
此我们就实现我们的&#8220;0配置&#8221;了，^_^，Annotation在其中还是扮演着非常重要的作用的，除了我们前面已提到的Result
Annotation这个Action Annotations外，还有Interceptor Annotations、Validation
Annotations和Type Conversion
Annotations，因为项目中基本上没有用到这个新特性，我也就没有深入的看这些Annotations的详细使用方法了。</p>
<p>from:http://blog.csdn.net/cmtobby/archive/2007/09/02/1769390.aspx</p>
<script type="text/javascript">
addthis_pub= 'wolfit';
addthis_logo= 'http://download.rainbowsoft.org/image/common/zbloglogo.gif';
addthis_brand= 'Z-Blog';
addthis_options= 'favorites, delicious, twitter, digg, myspace, facebook, google, live,  email, more';
</script>
<a href="http://www.addthis.com/AddThis.php" onmouseover="return addthis_open(this, '', '[URL]', '[TITLE]')" onmouseout="addthis_close()" onclick="return addthis_sendto()"><img src="http://s9.addthis.com/button1-bm.gif" alt="" border="0" width="125" height="16" /></a>
<p><br />
Tags: <a href="http://www.busfly.cn/csdn/Tags/struts.html">struts</a>&nbsp;&nbsp;<a href="http://www.busfly.cn/csdn/Tags/struts2.html">struts2</a>&nbsp;&nbsp;<a href="http://www.busfly.cn/csdn/Tags/%E9%85%8D%E7%BD%AE.html">配置</a>&nbsp;&nbsp;<a href="http://www.busfly.cn/csdn/Tags/Annotation.html">Annotation</a>&nbsp;&nbsp;<br />
<br />
原创文章如转载，请注明：转载自：<a href="http://www.busfly.cn/csdn/">飞扬部落编程仓库</a> : http://www.busfly.cn/csdn/</p>
<p>本文链接地址：<a href="http://www.busfly.cn/csdn/post/Struts-Struts2-Annotation.html">http://www.busfly.cn/csdn/post/Struts-Struts2-Annotation.html</a>
</p>
<p>如果你喜欢本文，请顶一下，支持我，你的支持是我继续发好文章的最大动力。谢谢。 <br />
好东西需要分享，快把本文发给你的朋友吧~!~</p>
</span>
<img src ="http://www.blogjava.net/kelven/aggbug/297335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kelven/" target="_blank">kelven.lee</a> 2009-10-07 00:23 <a href="http://www.blogjava.net/kelven/articles/297335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>