﻿<?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-Eric Kong-随笔分类-struts2</title><link>http://www.blogjava.net/jjshcc/category/45366.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 02 Sep 2012 20:34:21 GMT</lastBuildDate><pubDate>Sun, 02 Sep 2012 20:34:21 GMT</pubDate><ttl>60</ttl><item><title>OGNL表达式struts2标签“%，#，$”的区别</title><link>http://www.blogjava.net/jjshcc/archive/2012/09/02/386814.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Sun, 02 Sep 2012 13:12:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2012/09/02/386814.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/386814.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2012/09/02/386814.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/386814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/386814.html</trackback:ping><description><![CDATA[一、什么是OGNL，有什么特点？<br /><br />OGNL（Object-Graph Navigation Language），大概可以理解为：对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言。OGNL有如下特点：<br /><br />1、支持对象方法调用，形式如：objName.methodName()；<br /><br />2、支持类静态的方法调用和值访问，表达式的格式为@[类全名（包括包路）]@[方法名 | 值名]，例如：<br /><br />@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME；<br /><br />3、支持赋值操作和表达式串联，例如：<br /><br />price=100, discount=0.8, calculatePrice()，这个表达式会返回80；<br /><br />4、访问OGNL上下文（OGNL context）和ActionContext；<br /><br />5、操作集合对象。<br /><br /><br /><br />二、使用OGNL表达式<br /><br />OGNL要结合struts标签来使用。由于比较灵活，也容易把人给弄晕，尤其是&#8220;%&#8221;、&#8220;#&#8221;、&#8220;$&#8221;这三个符号的使用。由于$广泛应用于EL中，这里重点写%和#符号的用法。<br /><br />1、&#8220;#&#8221;符号有三种用途：<br /><br />(1)、访问非根对象（struts中值栈为根对象）如OGNL上下文和Action上下文，#相当于ActionContext.getContext()；下表有几个ActionContext中有用的属性：<br /><br />parameters<br />包含当前HTTP请求参数的Map<br />#parameters.id[0]作用相当于request.getParameter("id")<br /><br />request<br />包含当前HttpServletRequest的属性（attribute)的Map<br />#request.userName相当于request.getAttribute("userName")<br /><br />session<br />包含当前HttpSession的属性（attribute）的Map<br />#session.userName相当于session.getAttribute("userName")<br /><br />application<br />包含当前应用的ServletContext的属性（attribute）的Map<br />#application.userName相当于application.getAttribute("userName")<br /><br /><br />注：attr 用于按request &gt; session &gt; application顺序访问其属性（attribute），#attr.userName相当于按顺序在以上三个范围（scope）内读取 userName属性，直到找到为止。用于过滤和投影（projecting)集合，如books.{?#this.price&lt;100}；构造 Map，如#{'foo1':'bar1', 'foo2':'bar2'}。<br /><br />(2)、用于过滤和投影（projecting)集合，如: books.{?#this.price&gt;35}<br /><br />books.{?#this.price&gt;35}<br /><br />(3)、构造Map，如: #{'foo1':'bar1', 'foo2':'bar2'}<br /><br />#{'foo1':'bar1', 'foo2':'bar2'}这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写：<br /><br />&lt;s:property value="#myMap['foo1']"/&gt;<br /><br />&lt;s:property value="#myMap['foo1']"/&gt;<br /><br />2、&#8220;%&#8221;符号的用途是在标签的属性值被理解为字符串类型时，告诉执行环境%{}里的是OGNL表达式。很有点类似javascript里面的eval_r()功能，例如：<br /><br />var oDiv = eval_r("document.all.div"+index)<br /><br />var oDiv = eval_r("document.all.div"+index)<br /><br />当index变量为1时，语句就会被当作var oDiv = document.all.div1<br />var oDiv = document.all.div1来执行。%{}就是起这个作用。举例：<br /><br />&lt;s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/&gt; 第1行<br /><br />&lt;s:property value="#myMap['key1']"/&gt; 第2行<br /><br />&lt;s:url value="#myMap['key1']" /&gt; 　　　第3行<br /><br />&lt;s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/&gt; 第4行<br /><br />&lt;s:property value="#myMap['key1']"/&gt; 第5行<br /><br />&lt;s:url value="#myMap['key1']"/&gt; 第6行<br /><br />上面的代码第2行会在页面上输出&#8220;value1&#8221;，而第3行则会输出"#myMap['key1']"这么一个字符串。如果将第3行改写成这样：<br /><br />&lt;s:url value="%{#myMap['key1']}"/&gt;<br /><br />&lt;s:url value="%{#myMap['key1']}"/&gt;<br /><br />则输出为&#8220;value1&#8221;。<br /><br /><br /><br /><br /><br />这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签&#8220;看不懂&#8221;类似&#8220;#myMap['key1']&#8221;的语句时，就要用%{}来把这括进去，&#8220;翻译&#8221;一下了。<br /><br />3、&#8220;$&#8221;有两种用途<br /><br />(1)、在国际化资源文件中，引用OGNL表达式。<br /><br />(2)、在Struts 2配置文件中，引用OGNL表达式：<br /><br />&lt;action name="saveUser" class="userAction" method="save"&gt;<br /><br />&lt;result type="redirect"&gt;listUser.action?msg=${msg}&lt;/result&gt;<br /><br />&lt;/action&gt;<br /><br />&lt;action name="saveUser" class="userAction" method="save"&gt;<br /><br />&lt;result type="redirect"&gt;listUser.action?msg=${msg}&lt;/result&gt;<br /><br />&lt;/action&gt;<br /><img src ="http://www.blogjava.net/jjshcc/aggbug/386814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2012-09-02 21:12 <a href="http://www.blogjava.net/jjshcc/archive/2012/09/02/386814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的国际化  </title><link>http://www.blogjava.net/jjshcc/archive/2012/09/01/386773.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Sat, 01 Sep 2012 15:16:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2012/09/01/386773.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/386773.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2012/09/01/386773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/386773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/386773.html</trackback:ping><description><![CDATA[<p>Struts2的国际化<br />资源文件的命名：basename_language_country.properties<br />JAVA国际化<br />如果系统同时存在资源文件、类文件，系统将以类文件为主，而不会调用资源文件。<br />对于简体中文的Locale，ResourceBundle搜索资源的顺序是：<br />(1)baseName_zh_CN.class<br />(2)baseName_zh_CN.properties<br />(3)baseName_zh.class<br />(4)baseName_zh.properties<br />(5)baseName.class<br />(6)baseName.properties</p>
<p>&nbsp;<br />Struts2的国际化入门</p>
<p>Struts2国际化是建立在Java国际化的基础上的，一样是通过提供不同国家/语言环境的消息资源，然后通过ResourceBundle<br />加载指定Locale对应的资源文件，再取得该资源文件中指定key对应的消息--整个过程与JAVA程序的国家化完全相同，只是<br />Struts2框架对JAVA程序国际化进行了进一步封装，从而简化了应用程序的国际化。<br />Struts2需要国际化的部分<br />类型转换:<br />数据校验:<br />验证框架xml配置文件的国际化：RegisterAction-validation.xml文件&lt;message key="username.xml.invalid"/&gt;</p>
<p>JSP页面的国际化：&lt;s:text name="addUser"/&gt;</p>
<p>Action的国际化:利用ActionSupport类提供的getText()方法.</p>
<p>&nbsp;</p>
<p>Struts2中加载全局资源文件</p>
<p>struts.xml<br />&lt;constant name="struts.custom.i18n.resources" value="baseName"/&gt;<br />或<br />struts.properties<br />struts.custom.i18n.resources=baseName</p>
<p><br />访问国际化消息</p>
<p>Struts2访问国际化消息主要有如下三种方式：<br />(1)JSP页面：&lt;s:text name="key"/&gt;<br />(2)Action类中：使用ActionSupport类的getText方法。<br />(3)表单元素的Label里：为表单元素指定一个key属性</p>
<p>输出带占位符的国际化消息</p>
<p>Struts2中提供了如下两种方式来填充消息字符串中的占位符</p>
<p>(1)JSP页面，在&lt;s:text.../&gt;标签中使用多个&lt;s:param.../&gt;标签来填充消息中的占位符。<br />(2)Action中，在调用getText方法时使用getText(String aTextName,List args)或getText(String key, String[] args)方法来填充占位符。<br />除此之外，Struts2还提供了对占位符的一种替代方式，这种方式允许在国际化消息资源文件中使用表达式，对于这种方式，则可避免在使用国际化消息时还需要为占位符传入参数</p>
<p>值。</p>
<p>如下在消息资源中使用表达式<br />succTip=${username}, 欢迎, 您已经登录!<br />在上面的消息资源中，通过使用表达式，可以从ValueStack中取出该username属性值，自动填充到该消息资源中。</p>
<p>加载资源文件的方式<br />(1)加载全局资源文件： &lt;constant name="struts.custom.i18n.resources" value="baseName"/&gt;<br />(2)包范围资源文件 ：为Struts2指定包范围资源文件的方法是,在包的根路径下建立多个文件名为package_language_country.properties的文件，一旦建立了<br />&nbsp;&nbsp; 这个系列的国际化资源文件，应用中处于该包下的所有Action都可以访问该资源文件。需要注意的是上面的包范围资源文件的baseName就是package，不是Action所在的包名。<br />(3)Action范围资源文件：在Action类文件所在的路径建立多个文件名为ActionName_language_country.properties的文件。<br />(4)临时指定资源文件：&lt;s:i18n.../&gt;标签的name属性指定临时的国际化资源文件</p>
<p>加载资源文件的顺序<br />Action中加载资源文件，假设我们在某个ChildAction中调用了getText("user.title")，Struts 2.0的将会执行以下的操作：<br />(1)优先加载系统中保存在ChildAction的类文件相同位置，且baseName为ChildAction的系列资源文件。<br />(2)如果在(1)中找不到指定key对应的消息，且ChildAction有父类ParentAction，则加载系统中保存在ParentAction的类文件相同位置，且<br />&nbsp;&nbsp; baseName为ParentAction的系列资源文件。<br />(3)如果在(2)中找不到指定key对应的消息，且ChildAction有实现接口IChildAction，则加载系统中保存在IChildAction的类文件相同位置，且<br />&nbsp;&nbsp; baseName为IChildAction的系列资源文件。<br />(4)如果在(3)中找不到指定key对应的消息，且ChildAction有实现接口ModelDriven(即使用模型驱动模式)，则对于getModel()方法返回的model对象，<br />&nbsp;&nbsp; 重新执行第(1)步操作。<br />(5)如果在(4)中找不到指定key对应的消息，则查找当前包下baseName为package的系列资源文件。<br />(6)如果在(5)中找不到指定key对应的消息，则沿着当前包上溯，直到最顶层包来查找baseName为package的系列资源文件。<br />(7)如果在(6)中找不到指定key对应的消息，则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。<br />(8)如果经过上面的步骤一直找不到key对应的消息，将直接输出该key的字符串值。</p>
<p><br />对于在JSP中访问国际化消息，则简单的多，他们又可以分为两种形式：<br />(1)对于使用&lt;s:i18n.../&gt;标签作为父标签的&lt;s:text.../&gt;标签、表单标签的形式：<br />&nbsp;&nbsp; a、将从&lt;s:i18n.../&gt;标签指定的国际化资源文件中加载指定key对应的消息。<br />&nbsp;&nbsp; b、如果在a中找不到指定key对应的消息，则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。<br />&nbsp;&nbsp; c、如果经过上面步骤一直找不到该key对应的消息，将直接输出该key的字符串值。</p>
<p>(2)如果&lt;s:text.../&gt;标签、表单标签没有使用&lt;s:i18n.../&gt;标签作为父标签：<br />&nbsp;&nbsp;&nbsp; 直接加载struts.custom.i18n.resources常量指定baseName的系列资源文件。如果找不到该key对应的消息，将直接输出该key的字符串值。</p>
<p>&nbsp;</p>
<p>允许用户自行选择程序语言</p>
<p>Struts2国际化的运行机制<br />&nbsp;&nbsp;&nbsp; 在Struts2中，可以通过ActionContext.getContext().setLocale(Locale arg)设置用户的默认语言。<br />为了简化设置用户默认语言环境，Struts2提供了一个名为i18n的拦截器(Interceptor),并且将其注册在默认的拦截器中(defaultStack)。<br />&nbsp;&nbsp;&nbsp; i18n拦截器在执行Action方法前，自动查找请求中一个名为request_locale的参数。如果该参数存在，拦截器就将其作为参数，转换成Locale对象，<br />并将其设为用户默认的Locale(代表国家/语言环境)。<br />&nbsp;除此之外，i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为<br />WW_TRANS_I18N_LOCALE的属性，则该属性指定的Locale将会作为浏览者的默认Locale。<br />&lt;%@ page language="java" contentType="text/html; charset=GBK"%&gt;<br />&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#116;&#97;&#103;&#108;&#105;&#98;" rel="nofollow">%@taglib</a> prefix="s" uri="/struts-tags"%&gt;<br />&lt;script. type="text/javascript"&gt;<br />function langSelecter_onChanged()<br />{<br />&nbsp;document.getElementById("langForm").submit();<br />}<br />&lt;/script&gt;<br />&lt;%-- 设置SESSION_LOCALE为用户session中的WW_TRANS_I18N_LOCALE属性值 --%&gt;<br />&lt;s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/&gt;<br />&lt;%-- 使用lee.Locales创建locales实例 --%&gt;<br />&lt;s:bean id="locales" name="lee.Locales"&gt;<br />&nbsp;&lt;%-- 为locales实例传入current参数值，如果SESSION_LOCALE为空，则返回ValueStack中locale属性值(即用户浏览器设置的Locale) --%&gt;<br />&nbsp;&lt;s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/&gt;<br />&lt;/s:bean&gt;</p>
<p>&lt;%-- 让用户选择语言的表单 --%&gt;<br />&lt;form. action="&lt;s:url/&gt;" id="langForm" <br />&nbsp;&nbsp;&nbsp; style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;s:text name="languag"/&gt;<br />&nbsp;&lt;s:select label="Language" list="#locales.locales" listKey="value" listValue="key"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="request_locale" id="langSelecter" <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nchange="langSelecter_onChanged()" theme="simple"/&gt;<br />&lt;/form&gt;</p>
<p>在其他页面中包含该页面:</p>
<p>&lt;s:include value="selectlanguage.jsp"/&gt;<br />在struts.xml文件中增加Action通配符的配置：<br />&lt;?xml version="1.0" encoding="GBK"?&gt;<br />&lt;!DOCTYPE struts PUBLIC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href="http://struts.apache.org/dtds/struts-2.0.dtd" rel="nofollow">http://struts.apache.org/dtds/struts-2.0.dtd</a>"&gt;<br />&lt;struts&gt;<br />&nbsp;&lt;constant name="struts.custom.i18n.resources" value="messageResource"/&gt;<br />&nbsp;&lt;constant name="struts.i18n.encoding" value="GBK"/&gt;<br />&nbsp;&nbsp;&nbsp; &lt;package name="lee" extends="struts-default"&gt;<br />&nbsp; &lt;!-- 使用通配符定义Action的name --&gt;<br />&nbsp; &lt;action name="*"&gt;<br />&nbsp;&nbsp; &lt;!-- 将请求转发给/WEB-INF/jsp/路径下同名的JSP页面 --&gt;<br />&nbsp;&nbsp; &lt;result&gt;/WEB-INF/jsp/{1}.jsp&lt;/result&gt;<br />&nbsp; &lt;/action&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/package&gt;<br />&lt;/struts&gt;</p><img src ="http://www.blogjava.net/jjshcc/aggbug/386773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2012-09-01 23:16 <a href="http://www.blogjava.net/jjshcc/archive/2012/09/01/386773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2拦截器的使用</title><link>http://www.blogjava.net/jjshcc/archive/2012/08/31/386699.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Fri, 31 Aug 2012 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2012/08/31/386699.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/386699.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2012/08/31/386699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/386699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/386699.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如何使用struts2拦截器，或者自定义拦截器。特别注意，在使用拦截器的时候，在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器)：&lt;interceptor-ref name="checkbox"&gt;&nbsp; &lt;param name="uncheckedValue"&...&nbsp;&nbsp;<a href='http://www.blogjava.net/jjshcc/archive/2012/08/31/386699.html'>阅读全文</a><img src ="http://www.blogjava.net/jjshcc/aggbug/386699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2012-08-31 15:59 <a href="http://www.blogjava.net/jjshcc/archive/2012/08/31/386699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2自定义拦截器实例—登陆权限验证 </title><link>http://www.blogjava.net/jjshcc/archive/2012/08/29/386518.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Wed, 29 Aug 2012 06:31:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2012/08/29/386518.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/386518.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2012/08/29/386518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/386518.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/386518.html</trackback:ping><description><![CDATA[<div><p>版本：struts2.1.6</p> <p>此实例实现功能：用户需要指定用户名登陆，登陆成功进入相应页面执行操作，否则返回到登陆页面进行登陆，当直接访问操作页面（登陆后才能访问的页面）时则不允许，须返回登陆页面。</p> <p>代码如下：</p> <p>一、页面</p> <p>login.jsp</p> <div bg_xhtml"=""><div><div><strong>[xhtml]</strong> <a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="view plain">view plain</a><a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="copy">copy</a></div></div><ol start="1"><li><span>&lt;%@&nbsp;page&nbsp;language="java"&nbsp;import="java.util.*"&nbsp;pageEncoding="UTF-8"%&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"<span>&gt;&nbsp;&nbsp;</span></li><li><span>&lt;html&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;head&gt;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;title&gt;yuewei'Login&lt;/title&gt;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;!--&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&nbsp;rel="stylesheet"&nbsp;type="text/css"&nbsp;href="styles.css"&nbsp;mce_href="styles.css"&gt;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;--&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;/head&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;<span>&lt;body&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;form&nbsp;action="login.action"&nbsp;method="post"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;User:<span>&lt;input&nbsp;type="text"&nbsp;name="username"&gt;&lt;br&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;Passoword:<span>&lt;input&nbsp;type="password"&nbsp;name="password"&gt;&lt;br&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;input&nbsp;type="submit"&nbsp;value="submit"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;/form&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>&lt;/body&gt;&nbsp;&nbsp;</span></li><li><span>&lt;/html&gt;&nbsp;&nbsp;</span></li></ol></div>  <p>welcome.jsp</p> <div bg_xhtml"=""><div><div><strong>[xhtml]</strong> <a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="view plain">view plain</a><a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="copy">copy</a></div></div><ol start="1"><li><span>&lt;%@&nbsp;page&nbsp;language="java"&nbsp;import="java.util.*"&nbsp;pageEncoding="UTF-8"%&gt;&nbsp;&nbsp;</span></li><li>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"<span>&gt;&nbsp;&nbsp;</span></li><li><span>&lt;html&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;head&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;title&gt;&nbsp;yuewei's&nbsp;Welcome&lt;/title&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;<span>&lt;!--&nbsp;</span></li><li><span>&nbsp;&lt;link&nbsp;rel="stylesheet"&nbsp;type="text/css"&nbsp;href="styles.css"&nbsp;mce_href="styles.css"&gt;&nbsp;</span></li><li><span>&nbsp;--&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;<span>&lt;/head&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;<span>&lt;body&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;h1&gt;登录成功后显示此页面&lt;/h1&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;a&nbsp;href="show.action"&nbsp;mce_href="show.action"&gt;show&lt;/a&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;/body&gt;&nbsp;&nbsp;</span></li><li><span>&lt;/html&gt;&nbsp;&nbsp;</span></li></ol></div>  <p>show.jsp</p> <div bg_xhtml"=""><div><div><strong>[xhtml]</strong> <a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="view plain">view plain</a><a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="copy">copy</a></div></div><ol start="1"><li><span>&lt;%@&nbsp;page&nbsp;language="java"&nbsp;import="java.util.*"&nbsp;pageEncoding="UTF-8"%&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"<span>&gt;&nbsp;&nbsp;</span></li><li><span>&lt;html&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;head&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;title&gt;yuewei's&nbsp;Show&lt;/title&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;!--&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&nbsp;rel="stylesheet"&nbsp;type="text/css"&nbsp;href="styles.css"&nbsp;mce_href="styles.css"&gt;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;--&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;<span>&lt;/head&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;<span>&lt;body&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;Show&nbsp;This&nbsp;Page&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登录后执行此页面<span>&lt;br&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;/body&gt;&nbsp;&nbsp;</span></li><li><span>&lt;/html&gt;&nbsp;&nbsp;</span></li></ol></div>  <p>&nbsp;</p> <p>二、Action</p> <p>LoginFormAction</p> <div bg_java"=""><div><div><strong>[java]</strong> <a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="view plain">view plain</a><a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="copy">copy</a></div></div><ol start="1"><li><span>package&nbsp;com.ywjava.action;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;com.opensymphony.xwork2.ActionSupport;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>public&nbsp;class&nbsp;LoginFormAction&nbsp;extends&nbsp;ActionSupport&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;String&nbsp;exexcute()&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;"success";&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li></ol></div>  <p>LoginAction</p> <div bg_java"=""><div><div><strong>[java]</strong> <a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="view plain">view plain</a><a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="copy">copy</a></div></div><ol start="1"><li><span>package&nbsp;com.ywjava.action;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;com.opensymphony.xwork2.ActionContext;&nbsp;&nbsp;</span></li><li><span>import&nbsp;com.opensymphony.xwork2.ActionSupport;&nbsp;&nbsp;</span></li><li><span>import&nbsp;com.ywjava.utils.Constants;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>public&nbsp;class&nbsp;LoginAction&nbsp;extends&nbsp;&nbsp;ActionSupport{&nbsp;&nbsp;</span></li><li><span>private&nbsp;String&nbsp;username;&nbsp;&nbsp;</span></li><li><span>private&nbsp;String&nbsp;password;&nbsp;&nbsp;</span></li><li><span>public&nbsp;String&nbsp;getPassword()&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;password;&nbsp;&nbsp;</span></li><li>}&nbsp;&nbsp;</li><li><span>public&nbsp;void&nbsp;setPassword(String&nbsp;password)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>this.password&nbsp;=&nbsp;password;&nbsp;&nbsp;</span></li><li>}&nbsp;&nbsp;</li><li><span>public&nbsp;String&nbsp;getUsername()&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;username;&nbsp;&nbsp;</span></li><li>}&nbsp;&nbsp;</li><li><span>public&nbsp;void&nbsp;setUsername(String&nbsp;username)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>this.username&nbsp;=&nbsp;username;&nbsp;&nbsp;</span></li><li>}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li><span>private&nbsp;boolean&nbsp;isInvalid(String&nbsp;value)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;(value&nbsp;==&nbsp;null&nbsp;||&nbsp;value.length()&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li><span>public&nbsp;String&nbsp;execute(){&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(username);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(password);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>if&nbsp;(isInvalid(getUsername()))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;INPUT;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>if&nbsp;(isInvalid(getPassword()))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;INPUT;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>if(this.getUsername().equals("yuewei")&amp;&amp;&nbsp;this.getPassword().equals("yuewei")){&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionContext.getContext().getSession().put(Constants.USER_SESSION,getUsername());&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionContext.getContext().getSession().put(Constants.PASS,getPassword());&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;"success";&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;"error";&nbsp;&nbsp;</span></li><li>}&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li></ol></div>  <p>ShowAction</p> <div bg_java"=""><div><div><strong>[java]</strong> <a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="view plain">view plain</a><a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="copy">copy</a></div></div><ol start="1"><li><span>package&nbsp;com.ywjava.action;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;com.opensymphony.xwork2.ActionSupport;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>public&nbsp;class&nbsp;ShowAction&nbsp;extends&nbsp;ActionSupport&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;<span>public&nbsp;String&nbsp;execute()&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>return&nbsp;"success";&nbsp;&nbsp;</span></li><li>&nbsp;}&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li></ol></div>  <p>三、拦截器</p> <div bg_java"=""><div><div><strong>[java]</strong> <a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="view plain">view plain</a><a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="copy">copy</a></div></div><ol start="1"><li><span>package&nbsp;com.ywjava.interceptot;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;java.util.Map;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;com.opensymphony.xwork2.Action;&nbsp;&nbsp;</span></li><li><span>import&nbsp;com.opensymphony.xwork2.ActionContext;&nbsp;&nbsp;</span></li><li><span>import&nbsp;com.opensymphony.xwork2.ActionInvocation;&nbsp;&nbsp;</span></li><li><span>import&nbsp;com.opensymphony.xwork2.interceptor.AbstractInterceptor;&nbsp;&nbsp;</span></li><li><span>import&nbsp;com.ywjava.utils.Constants;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>public&nbsp;class&nbsp;LoginInterceptor&nbsp;extends&nbsp;AbstractInterceptor&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>@Override&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;String&nbsp;intercept(ActionInvocation&nbsp;invocation)&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//&nbsp;取得请求相关的ActionContext实例&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionContext&nbsp;ctx&nbsp;=&nbsp;invocation.getInvocationContext();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;session&nbsp;=&nbsp;ctx.getSession();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;user&nbsp;=&nbsp;(String)&nbsp;session.get(Constants.USER_SESSION);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//&nbsp;如果没有登陆，或者登陆所有的用户名不是yuewei，都返回重新登陆&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>if&nbsp;(user&nbsp;!=&nbsp;null&nbsp;&amp;&amp;&nbsp;user.equals("yuewei"))&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span>"test");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;invocation.invoke();&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctx.put(<span>"tip",&nbsp;"你还没有登录");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;Action.LOGIN;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li></ol></div>  <p>四 struts.xml</p> <div bg_c-sharp"=""><div><div><strong>[c-sharp]</strong> <a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="view plain">view plain</a><a href="http://blog.csdn.net/java_cxrs/article/details/5514340#" title="copy">copy</a></div></div><ol start="1"><li><span>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&nbsp;&nbsp;</span></li><li>&lt;!DOCTYPE&nbsp;struts&nbsp;PUBLIC&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.1//EN"&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>"http://struts.apache.org/dtds/struts-2.1.dtd"&gt;&nbsp;&nbsp;</span></li><li>&lt;struts&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;package&nbsp;name=<span>"authority"&nbsp;extends="struts-default"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;定义一个拦截器&nbsp;--&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;interceptors&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;interceptor&nbsp;name=<span>"authority"&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>class="com.ywjava.interceptot.LoginInterceptor"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/interceptor&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;拦截器栈&nbsp;--&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;interceptor-stack&nbsp;name=<span>"mydefault"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;interceptor-<span>ref&nbsp;name="defaultStack"&nbsp;/&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;interceptor-<span>ref&nbsp;name="authority"&nbsp;/&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/interceptor-stack&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/interceptors&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;定义全局Result&nbsp;--&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;global-results&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;当返回login视图名时，转入/login.jsp页面&nbsp;--&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;result&nbsp;name=<span>"login"&gt;/login.jsp&lt;/result&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/global-results&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&nbsp;name=<span>"loginform"&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>class="com.ywjava.action.LoginFormAction"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;result&nbsp;name=<span>"success"&gt;/login.jsp&lt;/result&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/action&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&nbsp;name=<span>"login"&nbsp;class="com.ywjava.action.LoginAction"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;result&nbsp;name=<span>"success"&gt;/welcome.jsp&lt;/result&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;result&nbsp;name=<span>"error"&gt;/login.jsp&lt;/result&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;result&nbsp;name=<span>"input"&gt;/login.jsp&lt;/result&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/action&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&nbsp;name=<span>"show"&nbsp;class="com.ywjava.action.ShowAction"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;result&nbsp;name=<span>"success"&gt;/show.jsp&lt;/result&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;使用此拦截器&nbsp;--&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;interceptor-<span>ref&nbsp;name="mydefault"&nbsp;/&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/action&gt;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/package&gt;&nbsp;&nbsp;</li><li>&lt;/struts&gt;&nbsp; <br /></li></ol></div></div><img src ="http://www.blogjava.net/jjshcc/aggbug/386518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2012-08-29 14:31 <a href="http://www.blogjava.net/jjshcc/archive/2012/08/29/386518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OGNL </title><link>http://www.blogjava.net/jjshcc/archive/2012/08/29/386516.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Wed, 29 Aug 2012 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2012/08/29/386516.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/386516.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2012/08/29/386516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/386516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/386516.html</trackback:ping><description><![CDATA[<div>&lt;li&gt;访问值栈中的action的普通属性: username = &lt;s:property value="username"/&gt; &lt;/li&gt;<br /><br />&lt;li&gt;访问值栈中对象的普通属性(get set方法)：&lt;s:property value="user.age"/&gt; | &lt;s:property value="user['age']"/&gt; | &lt;s:property value="user[\"age\"]"/&gt; | wrong: &lt;%--&lt;s:property value="user[age]"/&gt;--%&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问值栈中对象的普通属性(get set方法): &lt;s:property value="cat.friend.name"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问值栈中对象的普通方法：&lt;s:property value="password.length()"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问值栈中对象的普通方法：&lt;s:property value="cat.miaomiao()" /&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问值栈中action的普通方法：&lt;s:property value="m()" /&gt;&lt;/li&gt;<br /><br />&lt;hr /&gt;<br /><br />&lt;li&gt;访问静态方法：&lt;s:property value="@com.bjsxt.struts2.ognl.S@s()"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问静态属性：&lt;s:property value="@com.bjsxt.struts2.ognl.S@STR"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问Math类的静态方法：&lt;s:property value="@@max(2,3)" /&gt;&lt;/li&gt;<br /><br />&lt;hr /&gt;<br /><br />&lt;li&gt;访问普通类的构造方法：&lt;s:property value="new com.bjsxt.struts2.ognl.User(8)"/&gt;&lt;/li&gt;<br /><br />&lt;hr /&gt;<br /><br />&lt;li&gt;访问List:&lt;s:property value="users"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问List中某个元素:&lt;s:property value="users[1]"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问List中元素某个属性的集合:&lt;s:property value="users.{age}"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问List中元素某个属性的集合中的特定值:&lt;s:property value="users.{age}[0]"/&gt; | &lt;s:property value="users[0].age"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问Set:&lt;s:property value="dogs"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问Set中某个元素:&lt;s:property value="dogs[1]"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问Map:&lt;s:property value="dogMap"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问Map中某个元素:&lt;s:property value="dogMap.dog101"/&gt; | &lt;s:property value="dogMap['dog101']"/&gt; | &lt;s:property value="dogMap[\"dog101\"]"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问Map中所有的key:&lt;s:property value="dogMap.keys"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问Map中所有的value:&lt;s:property value="dogMap.values"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;访问容器的大小：&lt;s:property value="dogMap.size()"/&gt; | &lt;s:property value="users.size"/&gt; &lt;/li&gt;<br /><br />&lt;hr /&gt;<br /><br />&lt;li&gt;投影(过滤)：&lt;s:property value="users.{?#this.age==1}[0]"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;投影：&lt;s:property value="users.{^#this.age&gt;1}.{age}"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;投影：&lt;s:property value="users.{$#this.age&gt;1}.{age}"/&gt;&lt;/li&gt;<br /><br />&lt;li&gt;投影：&lt;s:property value="users.{$#this.age&gt;1}.{age} == null"/&gt;&lt;/li&gt;<br /><br />&lt;hr /&gt;<br /><br />&lt;li&gt;[]:&lt;s:property value="[0].username"/&gt;&lt;/li&gt;</div><img src ="http://www.blogjava.net/jjshcc/aggbug/386516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2012-08-29 14:18 <a href="http://www.blogjava.net/jjshcc/archive/2012/08/29/386516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何自定义Struts2表单验证后的错误信息显示格式/样式</title><link>http://www.blogjava.net/jjshcc/archive/2012/08/28/386463.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Tue, 28 Aug 2012 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2012/08/28/386463.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/386463.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2012/08/28/386463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/386463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/386463.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面一段时间学过一些Struts2的知识，感觉Struts2和1.x还是有很大的差别的，我还不好说1.x肯定会过时还是2.0会很快流行，这毕竟是需要作为导向的。&nbsp;&nbsp;&nbsp; 在Struts2中验证真的比较容易，可以在Action中直接写validate，也可以使用validate框架进行验证，这个我觉得比Struts1.x方便了很多，但是有个问题一直困扰了我，直到现在有...&nbsp;&nbsp;<a href='http://www.blogjava.net/jjshcc/archive/2012/08/28/386463.html'>阅读全文</a><img src ="http://www.blogjava.net/jjshcc/aggbug/386463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2012-08-28 22:17 <a href="http://www.blogjava.net/jjshcc/archive/2012/08/28/386463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2, 值在验证失败回到原来页面的时候会丢失的解决方案</title><link>http://www.blogjava.net/jjshcc/archive/2010/08/03/327870.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Tue, 03 Aug 2010 13:56:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2010/08/03/327870.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/327870.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2010/08/03/327870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/327870.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/327870.html</trackback:ping><description><![CDATA[<p>比如，当我要添加一个信用卡的时候，我需要信用卡的CardType, 这些数据是存在数据库中的，我要先通过action 的一个 create方法，取到信用卡的类型：</p>
<div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_22_123_Open_Image" alt="" align="top" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_22_123_Closed_Image" alt="" style="display: none;" align="top" /><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;create()</span><span style="color: #000000;">{<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;creditCardTypeList&nbsp;<span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">this</span><span style="color: #000000;">.creditCardTypeService.getList();<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SUCCESS;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />}</span></span></div>
</div>
&nbsp;
<p>Struts的配置文件：</p>
<div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">action&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="create"</span><span style="color: #ff0000;">&nbsp;method</span><span style="color: #0000ff;">="create"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="example.CreditCardAction"&gt;</span><span style="color: #000000;"><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">result&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="success"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">input.jsp</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">result</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">action</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<br />
<p>input.jsp</p>
<div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;">
<div>...<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;"><br />
&lt;</span><span style="color: #800000;">s:select&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="creditCard.creditCardTypeId"</span><span style="color: #ff0000;">&nbsp;list</span><span style="color: #0000ff;">="creditCardTypeList"</span><span style="color: #ff0000;">&nbsp;listKey</span><span style="color: #0000ff;">="creditCardTypeId"</span><span style="color: #ff0000;">&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listValue</span><span style="color: #0000ff;">="ccType"</span>&nbsp;<span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"> <br />
....</span></div>
</div>
<br />
<p>当提交input.jsp 的时候,Validate 检查没有通过，这时我需要回到input.jsp，此时应该下拉列表框的CreditType应该被保留,只需要在<span style="color: #0000ff;">example.CreditCardAction 实现 </span><span style="color: #0000ff;">Preparable接口，并实现prepare 方法，然后在add的 action中加上</span></p>
<div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="prepare"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultStack"</span><span style="color: #0000ff;">/&gt;</span></div>
</div>
就可以了<br />
prepare方法：
<div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_21_84_Open_Image" alt="" align="top" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_21_84_Closed_Image" alt="" style="display: none;" align="top" /><span style="color: #0000ff;">public</span>&nbsp;<span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;prepare()</span><span style="color: #000000;">{<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;creditCardTypeList&nbsp;<span style="color: #000000;">=</span>&nbsp;<span style="color: #0000ff;">this</span><span style="color: #000000;">.creditCardTypeService.getList();&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />}</span></span></div>
</div>
<br />
Add Acton:<br />
<div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">action&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="add"</span><span style="color: #ff0000;">&nbsp;method</span><span style="color: #0000ff;">="add"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="example.CreditCardAction"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="prepare"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultStack"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">result&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="input"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">input.jsp</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">result</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">result&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="success"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="redirect-action"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="namespace"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/credit</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">param</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="actionName"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">list</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">param</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">result</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">action</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<br />
<p>&nbsp; 这样，在验证前将首先调用 prepare方法，即使失败了回到input.jsp页面creditCardType选择框的值仍然存在。</p>
<p><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultStack"</span><span style="color: #0000ff;">/&gt; <span style="color: #000000;">中的 defaultStack 是我们在struts.xml 中配置的，其中我们注释掉了 </span></span><span style="color: #000000;">&lt;interceptor-ref
name="prepare"/&gt;
这样在example.CreditCardAction中的其他Action就不会首先执行prepare方法，只有加上了
&lt;interceptor-ref&nbsp;name="prepare"/&gt; 的才会去首先执行 prepare方法。</span></p>
<span style="color: #000000;">
<div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">package&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="project-default"</span><span style="color: #ff0000;">&nbsp;abstract</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;extends</span><span style="color: #0000ff;">="struts-default"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptors</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-stack&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultStack"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="exception"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="alias"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="servletConfig"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;interceptor-ref&nbsp;name="prepare"/&gt;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="i18n"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="chain"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="debugging"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="profiling"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="scopedModelDriven"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="modelDriven"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="fileUpload"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;interceptor-ref&nbsp;name="checkbox"&gt;&nbsp;&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param&nbsp;name="uncheckedValue"&gt;no&lt;/param&gt;&nbsp;&nbsp;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/interceptor-ref&gt;<br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="staticParams"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="params"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="excludeParams"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">dojo..*</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">param</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">interceptor-ref</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="conversionError"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="validation"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="excludeMethods"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">input,back,cancel,browse</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">param</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">interceptor-ref</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">interceptor-ref&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="workflow"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="excludeMethods"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">input,back,cancel,browse</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">param</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">interceptor-ref</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">interceptor-stack</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">interceptors</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">package</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br />
</span></div>
</div>
</span>
<img src ="http://www.blogjava.net/jjshcc/aggbug/327870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2010-08-03 21:56 <a href="http://www.blogjava.net/jjshcc/archive/2010/08/03/327870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2上传文件、生成缩略图、添加文字和图片水印</title><link>http://www.blogjava.net/jjshcc/archive/2010/07/14/326133.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Wed, 14 Jul 2010 13:26:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2010/07/14/326133.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/326133.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2010/07/14/326133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/326133.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/326133.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、页面代码Html代码     &lt;%@&nbsp;page&nbsp;contentType="text/html;charset=UTF-8"%&gt;&nbsp;&nbsp;    &lt;%@&nbsp;taglib&nbsp;prefix="c"&nbsp;uri="http://java.sun.com/jsp/jstl/core"%&gt;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/jjshcc/archive/2010/07/14/326133.html'>阅读全文</a><img src ="http://www.blogjava.net/jjshcc/aggbug/326133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2010-07-14 21:26 <a href="http://www.blogjava.net/jjshcc/archive/2010/07/14/326133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP页面获取ValueStack中的值</title><link>http://www.blogjava.net/jjshcc/archive/2010/06/30/324924.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Wed, 30 Jun 2010 13:18:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2010/06/30/324924.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/324924.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2010/06/30/324924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/324924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/324924.html</trackback:ping><description><![CDATA[<p>我们知道Struts2会将Action中的属性存放到ValueStack对象中，在通过Action转发的页面中，我们可以通过Struts2的标签&lt;s:property/&gt;来输出这些值，但是这样得到的值却仅限于输出显示，不能进行进一步的操作，那么我们应该怎样得到ValueStack中的值又能对它进行其他操作呢？</p>
<p>首先，我们需要了解Struts2是将Action中的属性全部封装在一个叫做struts.valueStack的请求属性中，然后我们就可以通过下面的代码来获取这些值了：</p>
<p>&nbsp;</p>
<pre style="display: none" class="html" name="code">&lt;%@ page import="com.opensymphony.xwork2.util.*"%&gt;
&lt;%
ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
List someThing= (List)vs.findValue("someThing");
%&gt;
</pre>
<p>&nbsp;<span style="white-space: pre">someThing是Action中属性值的名称。</span></p>
<img src ="http://www.blogjava.net/jjshcc/aggbug/324924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2010-06-30 21:18 <a href="http://www.blogjava.net/jjshcc/archive/2010/06/30/324924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的属性驱动与模型驱动的区别</title><link>http://www.blogjava.net/jjshcc/archive/2010/06/17/323750.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Thu, 17 Jun 2010 13:05:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2010/06/17/323750.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/323750.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2010/06/17/323750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/323750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/323750.html</trackback:ping><description><![CDATA[<p>1.Struts2的属性驱动. </p>
<p>Struts2的属性驱动指的是在action中JSP页面的每一个form中的name都对应在action中有一个属性与之对应。看下面代码片段: </p>
<p>&nbsp;</p>
<p><br />
&lt;form action="register.do" name="RegisterForm" method="post"&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Username:&lt;input type="text" name="uname"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password:&lt;input type="password" name="upass"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Confirm: &lt;input type="password" name="rpass"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="Submit"&gt; </p>
<p>&lt;/form&gt; </p>
<p>&nbsp;</p>
<p><br />
这是一个最基本的用户注册的表单,它有三个数据要提交: uname、upass、rpass，那么对应的Action也要有三个属性（其实是三个属性的setter），看register.do实际的Action定义类： </p>
<p>&nbsp;</p>
<p><br />
package org.abu.csdn.action.user;</p>
<p>import com.opensymphony.xwork2.ActionSupport;</p>
<p>/**<br />
&nbsp;* Struts2属性驱动演示用的Action<br />
&nbsp;* @author 阿布<br />
&nbsp;*<br />
&nbsp;*/ <br />
public class RegisterAction extends ActionSupport {</p>
<p>&nbsp;&nbsp;&nbsp; private String uname;<br />
&nbsp;&nbsp;&nbsp; private String upass;<br />
&nbsp;&nbsp;&nbsp; private String rpass;</p>
<p>&nbsp;&nbsp;&nbsp; public String getUname() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return uname;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUname(String uname) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.uname = uname;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getUpass() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return upass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUpass(String upass) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.upass = upass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getRpass() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return rpass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setRpass(String rpass) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.rpass = rpass;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; public String execute() throws Exception {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ActionSupport.SUCCESS;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>你会看到RegisterAction中的三个属性和RegisterForm表单中的name属性名字一模一样，没错，这就是Struts2的属性驱动，当表单提交到RegisterAction后，Struts2将会自动将根据表单的name属性调用Action中相应的属性setter，去自动赋值。 </p>
<p>&nbsp;</p>
<p><br />
2.Struts2的模型驱动 </p>
<p>Struts2的模型驱动其实和Struts1.x中的ActionForm有点类似，在Struts1.x中每一个Action都必须有一个ActionForm与之对应，而Struts2.0中，每一个Action同样需要提供一个POJO对象，用来封装表单属性，看代码： </p>
<p>&nbsp;</p>
<p><br />
&lt;form action="register.do" name="RegisterForm" method="post"&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Username:&lt;input type="text" name="uname"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password:&lt;input type="password" name="upass"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Confirm: &lt;input type="password" name="rpass"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="Submit"&gt; </p>
<p>&lt;/form&gt; </p>
<p>&nbsp;</p>
<p><br />
这段表单的代码和上面的一模一样，就不赘述了。接下来看POJO的代码，其实就是普通的Java Bean： </p>
<p>&nbsp;</p>
<p><br />
package org.abu.csdn.action.user;</p>
<p>import com.opensymphony.xwork2.ActionSupport;</p>
<p>/**<br />
&nbsp;* Struts2属性驱动演示用的Java Bean<br />
&nbsp;* @author 阿布<br />
&nbsp;*<br />
&nbsp;*/ <br />
public class User {</p>
<p>&nbsp;&nbsp;&nbsp; private String uname;<br />
&nbsp;&nbsp;&nbsp; private String upass;<br />
&nbsp;&nbsp;&nbsp; private String rpass;</p>
<p>&nbsp;&nbsp;&nbsp; public String getUname() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return uname;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUname(String uname) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.uname = uname;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getUpass() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return upass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUpass(String upass) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.upass = upass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getRpass() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return rpass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setRpass(String rpass) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.rpass = rpass;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
} </p>
<p>&nbsp;</p>
<p><br />
对不起，也是和属性驱动中的例子一样，很简单，因为演示的都是同一个例子，只是方法不同而已，但是接下来就不一样了，看RegisterAction代码： </p>
<p>&nbsp;</p>
<p><br />
package org.abu.csdn.action.user;</p>
<p>import org.abu.csdn.dto.User;</p>
<p>import com.opensymphony.xwork2.ActionSupport;<br />
import com.opensymphony.xwork2.ModelDriven;</p>
<p>/**<br />
&nbsp;* Struts2模型驱动演示用的Action<br />
&nbsp;*&nbsp; <br />
&nbsp;* @author 阿布<br />
&nbsp;*<br />
&nbsp;*/ <br />
public class RegisterAction extends ActionSupport implements ModelDriven&lt;User&gt; {</p>
<p>&nbsp;&nbsp;&nbsp; private User user;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public User getUser() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return user;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUser(User user) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.user = user;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; public String execute() throws Exception {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ActionSupport.SUCCESS;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; // 模型驱动必须实现的方法，也是ModelDriven接口中唯一的方法 <br />
&nbsp;&nbsp;&nbsp; public User getModel() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return user;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>看到没有，和属性驱动的Action有很大的区别，下面一一列举： </p>
<p>（1）模型驱动的Action必须实现ModelDriven接口，而且要提供相应的泛型，这里当然就是具体使用的Java Bean了。 </p>
<p>（2）实现ModelDriven的getModel方法，其实就是简单的返回泛型的一个对象。 </p>
<p>（3）在Action提供一个泛型的私有对象，这里就是定义一个User的user对象，并提供相应的getter与setter。 </p>
<p>好了，上面的三件事做完之后，Action就会去自动调用User的setter将表单中的name属性的值赋给User中的属性。而Action的后续处理的Jsp页面后者是Servlet就可以使用user对象了。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>3.到底是用属性驱动和是模型驱动呢？ </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这个问题困扰了很多Struts2的初学者，我这里提供一些建议： </p>
<p>（1）请你统一整个系统中的Action使用的驱动模型，即要么都是用属性驱动，要么都是用模型驱动。 </p>
<p>（2）如果你的DB中的持久层的对象与表单中的属性都是一一对应的话，那么就使用模型驱动吧，毕竟看起来代码要整洁得多。 </p>
<p>（3）如果表单的属性不是一一对应的话，那么就应该使用属性驱动，否则，你的系统就必须提供两个Bean，一个对应表单提交的数据，另一个用与持久层。 </p>
<p>&nbsp;</p>
<p><br />
看上面的例子，其实密码确认rpass是不需要放到DB中去的，而仅仅是用于校验密码的，不是吗？那么如果使用模型驱动的话，就存在这个问题了，而使用属性驱动的话又有些繁琐，现在我们就来调整一个看我的解决方法： </p>
<p>&nbsp;</p>
<p><br />
4.完整的例子 </p>
<p>（1）表单提交的JSP页面index.jsp </p>
<p>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br />
&nbsp;&nbsp;&nbsp; pageEncoding="UTF-8"%&gt;<br />
&lt;%@ taglib uri="/struts-tags" prefix="s"%&gt;<br />
&lt;%<br />
&nbsp;&nbsp;&nbsp; String path = request.getContextPath();<br />
&nbsp;&nbsp;&nbsp; String basePath = request.getScheme() + "://"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + request.getServerName() + ":" + request.getServerPort()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + path + "/";<br />
%&gt;</p>
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;<br />
&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;base href="&lt;%=basePath%&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;CSDN首页&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:a href="userManager/userRegister.jsp"&gt;用户注册&lt;/s:a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form action="register.do" name="SampleForm" method="post"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Username:&lt;input type="text" name="uname"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password:&lt;input type="password" name="upass"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Confirm: &lt;input type="password" name="rpass"&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="Submit"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/body&gt;<br />
&lt;/html&gt; </p>
<p>&nbsp;</p>
<p><br />
(2)User的定义 </p>
<p>&nbsp;</p>
<p><br />
package org.abu.csdn.action.user;</p>
<p>import com.opensymphony.xwork2.ActionSupport;</p>
<p>/**<br />
&nbsp;* Struts2属性驱动演示用的Java Bean<br />
&nbsp;* @author 阿布<br />
&nbsp;*<br />
&nbsp;*/ <br />
public class User {</p>
<p>&nbsp;&nbsp;&nbsp; private String uname;<br />
&nbsp;&nbsp;&nbsp; private String upass;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; public String getUname() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return uname;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUname(String uname) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.uname = uname;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getUpass() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return upass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUpass(String upass) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.upass = upass;<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
} </p>
<p>&nbsp;</p>
<p><br />
（3）RegisterAction的定义 </p>
<p>&nbsp;</p>
<p><br />
package org.abu.csdn.action.user;</p>
<p>import com.opensymphony.xwork2.ActionSupport;</p>
<p>/**<br />
&nbsp;* Struts2属性驱动演示用的Action<br />
&nbsp;* @author 阿布<br />
&nbsp;*<br />
&nbsp;*/ <br />
public class RegisterAction extends ActionSupport {</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; // 用来给spring注入，及属性拷贝 </p>
<p><br />
&nbsp;&nbsp;&nbsp; private User user;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; private String uname;<br />
&nbsp;&nbsp;&nbsp; private String upass;<br />
&nbsp;&nbsp;&nbsp; private String rpass;</p>
<p>&nbsp;&nbsp;&nbsp; public String getUname() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return uname;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUname(String uname) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.uname = uname;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getUpass() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return upass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setUpass(String upass) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.upass = upass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getRpass() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return rpass;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setRpass(String rpass) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.rpass = rpass;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; public String execute() throws Exception { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 调用方法将属性copy到user中去，便于后续的service方法 </p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; copyAttribute(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO：编写自己的user业务代码 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ActionSupport.SUCCESS;<br />
&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;</p>
<p><br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 注意这是一个action全局的校验<br />
&nbsp;&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; public void validate() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 进行密码的校验 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(upass.trim()).equals((rpass.trim()))) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 注意这里addFieldError的fieldName参数必须用引号引起来,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 不能这样使用addFieldError(rpass,"XXXXXX"),而必须是addFieldError("rpass","XXXXX") <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.addFieldError("rpass", this<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getText("csdn.action.user.register.validate.verify"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 将表单属性中需要持久化的属性拷贝到user中去<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @author 阿布<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; private void copyAttributes () { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setUname(uname); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setUpass(upass);</p>
<p><br />
&nbsp;&nbsp;&nbsp; } </p>
<p><br />
} </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>（4）Struts.xml配置 </p>
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts PUBLIC<br />
&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"<br />
&nbsp;&nbsp;&nbsp; "http://struts.apache.org/dtds/struts-2.1.dtd"&gt;<br />
&lt;struts&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;package name="root" extends="struts-default" namespace="/userManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="userRegister" class="org.abu.csdn.action.user.RegisterAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="success"&gt;/index.jsp&lt;/result&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="input"&gt;/userManager/userRegister.jsp&lt;/result&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/package&gt;<br />
&lt;/struts&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/csuliky/archive/2009/05/30/4226917.aspx</p>
 <img src ="http://www.blogjava.net/jjshcc/aggbug/323750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2010-06-17 21:05 <a href="http://www.blogjava.net/jjshcc/archive/2010/06/17/323750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>