Action接口和ActionSupport基类

来源:互联网 发布:手机图文设计软件 编辑:程序博客网 时间:2024/05/21 14:57
<div id="article_content" class="article_content">


<p>本文摘自:李刚 著 《轻量级 <a href="http://lib.csdn.net/base/javaee" class="replace_word" title="Java EE知识库" target="_blank" style="color:#df3434; font-weight:bold;">Java EE</a>企业应用实战 Struts2+<a href="http://lib.csdn.net/base/javaee" class="replace_word" title="Java EE知识库" target="_blank" style="color:#df3434; font-weight:bold;">spring</a>+<a href="http://lib.csdn.net/base/javaee" class="replace_word" title="Java EE知识库" target="_blank" style="color:#df3434; font-weight:bold;">hibernate</a>整合开发》</p>
<p>续 实现Action(一)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了让用户开发的Action类更加规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action处理类应该实现的规范。下面是标准Action接口的代码:</p>
<div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 417px; top: 666px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&amp;width=18&amp;height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="keyword">package</span><span>&nbsp;ppp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;Action&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//定义Action接口里包含的一些结果字符串</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;ERROR&nbsp;=&nbsp;</span><span class="string">"error"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;INPUT&nbsp;=&nbsp;</span><span class="string">"input"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;LOGIN&nbsp;=&nbsp;</span><span class="string">"login"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;NONE&nbsp;=&nbsp;</span><span class="string">"none"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SUCCESS&nbsp;=&nbsp;</span><span class="string">"success"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//定义处理用户请求的execute()方法</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;execute()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception;&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li></ol><div class="save_code tracking-ad" data-mod="popu_249" style="display: none;"><a href="javascript:;" target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre class="java" name="code" style="display: none;">package ppp;


public interface Action {


//定义Action接口里包含的一些结果字符串
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public static final String NONE = "none";
public static final String SUCCESS = "success";

//定义处理用户请求的execute()方法
public String execute() throws Exception;
}</pre>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面的Action接口里只定义了一个execute()方法,该接口规范规定了Action类应该包含一个execute()方法,该方法返回一个字符串,此外,该接口还定义了5个字符串常量,他的作用是统一execute()方法的返回值。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如,当Action类处理用户处理成功后,有人喜欢返回welcome字符串,有人喜欢返回success字符串,如此不利于项目的统一管理,Struts2的Action接口定义加上了如上的5个字符串常量:ERROR,NONE,INPUT,LOGIN,SUCCESS等,分别代表了特定的含义。当然,如果开发者依然希望使用特定的字符串作为逻辑视图名,开发者依然可以返回自己的视图名。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外,Struts2还为Action接口提供了一个实现类:ActionSupport,下面是该实现类的代码:</p>
<p>&nbsp;</p>
<div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 417px; top: 1254px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&amp;width=18&amp;height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.opensymphony.xwork2;&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork2.inject.Container;&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork2.inject.Inject;&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork2.util.ValueStack;&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork2.util.logging.Logger;&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork2.util.logging.LoggerFactory;&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.Serializable;&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.Collection;&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.util.List;&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.Locale;&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.util.Map;&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.ResourceBundle;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">/**</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;Provides&nbsp;a&nbsp;default&nbsp;implementation&nbsp;for&nbsp;the&nbsp;most&nbsp;common&nbsp;actions.</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;See&nbsp;the&nbsp;documentation&nbsp;for&nbsp;all&nbsp;the&nbsp;interfaces&nbsp;this&nbsp;class&nbsp;implements&nbsp;for&nbsp;more&nbsp;detailed&nbsp;information.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ActionSupport&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Action,&nbsp;Validateable,&nbsp;ValidationAware,&nbsp;TextProvider,&nbsp;LocaleProvider,&nbsp;Serializable&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Logger&nbsp;LOG&nbsp;=&nbsp;LoggerFactory.getLogger(ActionSupport.</span><span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;ValidationAwareSupport&nbsp;validationAware&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ValidationAwareSupport();&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">transient</span><span>&nbsp;TextProvider&nbsp;textProvider;&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">private</span><span>&nbsp;Container&nbsp;container;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setActionErrors(Collection&lt;String&gt;&nbsp;errorMessages)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>validationAware.setActionErrors(errorMessages);&nbsp;&nbsp;</span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;Collection&lt;String&gt;&nbsp;getActionErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;validationAware.getActionErrors();&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setActionMessages(Collection&lt;String&gt;&nbsp;messages)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>validationAware.setActionMessages(messages);&nbsp;&nbsp;</span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;Collection&lt;String&gt;&nbsp;getActionMessages()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;validationAware.getActionMessages();&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">/**</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;@deprecated&nbsp;Use&nbsp;{@link&nbsp;#getActionErrors()}.</span>&nbsp;</span></li><li class=""><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="annotation">@Deprecated</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;Collection&lt;String&gt;&nbsp;getErrorMessages()&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;getActionErrors();&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;@deprecated&nbsp;Use&nbsp;{@link&nbsp;#getFieldErrors()}.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="annotation">@Deprecated</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;Map&lt;String,&nbsp;List&lt;String&gt;&gt;&nbsp;getErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;getFieldErrors();&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">//设置表单域校验错误信息</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setFieldErrors(Map&lt;String,&nbsp;List&lt;String&gt;&gt;&nbsp;errorMap)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>validationAware.setFieldErrors(errorMap);&nbsp;&nbsp;</span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">//返回表单域错误校验信息</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;Map&lt;String,&nbsp;List&lt;String&gt;&gt;&nbsp;getFieldErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;validationAware.getFieldErrors();&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">//控制locale的相关信息</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;Locale&nbsp;getLocale()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>ActionContext&nbsp;ctx&nbsp;=&nbsp;ActionContext.getContext();&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">if</span><span>&nbsp;(ctx&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;ctx.getLocale();&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>LOG.debug(<span class="string">"Action&nbsp;context&nbsp;not&nbsp;initialized"</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasKey(String&nbsp;key)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;getTextProvider().hasKey(key);&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;aTextName)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(aTextName);&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">//返回国际化信息的方法</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;aTextName,&nbsp;String&nbsp;defaultValue)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(aTextName,&nbsp;defaultValue);&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;aTextName,&nbsp;String&nbsp;defaultValue,&nbsp;String&nbsp;obj)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(aTextName,&nbsp;defaultValue,&nbsp;obj);&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;aTextName,&nbsp;List&lt;Object&gt;&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(aTextName,&nbsp;args);&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;key,&nbsp;String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(key,&nbsp;args);&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;aTextName,&nbsp;String&nbsp;defaultValue,&nbsp;List&lt;Object&gt;&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(aTextName,&nbsp;defaultValue,&nbsp;args);&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;key,&nbsp;String&nbsp;defaultValue,&nbsp;String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(key,&nbsp;defaultValue,&nbsp;args);&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;key,&nbsp;String&nbsp;defaultValue,&nbsp;List&lt;Object&gt;&nbsp;args,&nbsp;ValueStack&nbsp;stack)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(key,&nbsp;defaultValue,&nbsp;args,&nbsp;stack);&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;String&nbsp;getText(String&nbsp;key,&nbsp;String&nbsp;defaultValue,&nbsp;String[]&nbsp;args,&nbsp;ValueStack&nbsp;stack)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getText(key,&nbsp;defaultValue,&nbsp;args,&nbsp;stack);&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="comment">//用于访问国际化资源包的方法</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;ResourceBundle&nbsp;getTexts()&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getTexts();&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;ResourceBundle&nbsp;getTexts(String&nbsp;aBundleName)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;getTextProvider().getTexts(aBundleName);&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">//添加错误信息</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;addActionError(String&nbsp;anErrorMessage)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>validationAware.addActionError(anErrorMessage);&nbsp;&nbsp;</span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;addActionMessage(String&nbsp;aMessage)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>validationAware.addActionMessage(aMessage);&nbsp;&nbsp;</span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span>添加字段校验的错误信息&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;addFieldError(String&nbsp;fieldName,&nbsp;String&nbsp;errorMessage)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>validationAware.addFieldError(fieldName,&nbsp;errorMessage);&nbsp;&nbsp;</span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="comment">//默认Input方法,直接访问input字符串</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;String&nbsp;input()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;INPUT;&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;String&nbsp;doDefault()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;SUCCESS;&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">/**</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;A&nbsp;default&nbsp;implementation&nbsp;that&nbsp;does&nbsp;nothing&nbsp;an&nbsp;returns&nbsp;"success".</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;&lt;p/&gt;</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;Subclasses&nbsp;should&nbsp;override&nbsp;this&nbsp;method&nbsp;to&nbsp;provide&nbsp;their&nbsp;business&nbsp;logic.</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;&lt;p/&gt;</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;See&nbsp;also&nbsp;{@link&nbsp;com.opensymphony.xwork2.Action#execute()}.</span>&nbsp;</span></li><li class=""><span><span class="comment">*</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;@return&nbsp;returns&nbsp;{@link&nbsp;#SUCCESS}</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;@throws&nbsp;Exception&nbsp;can&nbsp;be&nbsp;thrown&nbsp;by&nbsp;subclasses.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="comment">//默认处理用户请求的方法,直接返回SUCCESS字符串</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;String&nbsp;execute()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;SUCCESS;&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasActionErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;validationAware.hasActionErrors();&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasActionMessages()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;validationAware.hasActionMessages();&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;validationAware.hasErrors();&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;hasFieldErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;validationAware.hasFieldErrors();&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">/**</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;Clears&nbsp;field&nbsp;errors.&nbsp;Useful&nbsp;for&nbsp;Continuations&nbsp;and&nbsp;other&nbsp;situations</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;where&nbsp;you&nbsp;might&nbsp;want&nbsp;to&nbsp;clear&nbsp;parts&nbsp;of&nbsp;the&nbsp;state&nbsp;on&nbsp;the&nbsp;same&nbsp;action.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;clearFieldErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>validationAware.clearFieldErrors();&nbsp;&nbsp;</span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;Clears&nbsp;action&nbsp;errors.&nbsp;Useful&nbsp;for&nbsp;Continuations&nbsp;and&nbsp;other&nbsp;situations</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;where&nbsp;you&nbsp;might&nbsp;want&nbsp;to&nbsp;clear&nbsp;parts&nbsp;of&nbsp;the&nbsp;state&nbsp;on&nbsp;the&nbsp;same&nbsp;action.</span>&nbsp;</span></li><li class=""><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;clearActionErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>validationAware.clearActionErrors();&nbsp;&nbsp;</span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">/**</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;Clears&nbsp;messages.&nbsp;Useful&nbsp;for&nbsp;Continuations&nbsp;and&nbsp;other&nbsp;situations</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;where&nbsp;you&nbsp;might&nbsp;want&nbsp;to&nbsp;clear&nbsp;parts&nbsp;of&nbsp;the&nbsp;state&nbsp;on&nbsp;the&nbsp;same&nbsp;action.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;clearMessages()&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>validationAware.clearMessages();&nbsp;&nbsp;</span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;Clears&nbsp;all&nbsp;errors.&nbsp;Useful&nbsp;for&nbsp;Continuations&nbsp;and&nbsp;other&nbsp;situations</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;where&nbsp;you&nbsp;might&nbsp;want&nbsp;to&nbsp;clear&nbsp;parts&nbsp;of&nbsp;the&nbsp;state&nbsp;on&nbsp;the&nbsp;same&nbsp;action.</span>&nbsp;</span></li><li class=""><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;clearErrors()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>validationAware.clearErrors();&nbsp;&nbsp;</span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">/**</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;Clears&nbsp;all&nbsp;errors&nbsp;and&nbsp;messages.&nbsp;Useful&nbsp;for&nbsp;Continuations&nbsp;and&nbsp;other&nbsp;situations</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;where&nbsp;you&nbsp;might&nbsp;want&nbsp;to&nbsp;clear&nbsp;parts&nbsp;of&nbsp;the&nbsp;state&nbsp;on&nbsp;the&nbsp;same&nbsp;action.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="comment">//清理错误信息的方法</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;clearErrorsAndMessages()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>validationAware.clearErrorsAndMessages();&nbsp;&nbsp;</span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">/**</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;A&nbsp;default&nbsp;implementation&nbsp;that&nbsp;validates&nbsp;nothing.</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;Subclasses&nbsp;should&nbsp;override&nbsp;this&nbsp;method&nbsp;to&nbsp;provide&nbsp;validations.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="comment">//包含空校验的方法</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;validate()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;Object&nbsp;clone()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;CloneNotSupportedException&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">super</span><span>.clone();&nbsp;&nbsp;</span></span></li><li class=""><span>}&nbsp;&nbsp;</span></li><li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;&lt;!--&nbsp;START&nbsp;SNIPPET:&nbsp;pause-method&nbsp;--&gt;</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;Stops&nbsp;the&nbsp;action&nbsp;invocation&nbsp;immediately&nbsp;(by&nbsp;throwing&nbsp;a&nbsp;PauseException)&nbsp;and&nbsp;causes&nbsp;the&nbsp;action&nbsp;invocation&nbsp;to&nbsp;return</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;the&nbsp;specified&nbsp;result,&nbsp;such&nbsp;as&nbsp;{@link&nbsp;#SUCCESS},&nbsp;{@link&nbsp;#INPUT},&nbsp;etc.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;&lt;p/&gt;</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;&lt;p/&gt;</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;The&nbsp;next&nbsp;time&nbsp;this&nbsp;action&nbsp;is&nbsp;invoked&nbsp;(and&nbsp;using&nbsp;the&nbsp;same&nbsp;continuation&nbsp;ID),&nbsp;the&nbsp;method&nbsp;will&nbsp;resume&nbsp;immediately</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;after&nbsp;where&nbsp;this&nbsp;method&nbsp;was&nbsp;called,&nbsp;with&nbsp;the&nbsp;entire&nbsp;call&nbsp;stack&nbsp;in&nbsp;the&nbsp;execute&nbsp;method&nbsp;restored.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;&lt;p/&gt;</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;&lt;p/&gt;</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;Note:&nbsp;this&nbsp;method&nbsp;can&nbsp;&lt;b&gt;only&lt;/b&gt;&nbsp;be&nbsp;called&nbsp;within&nbsp;the&nbsp;{@link&nbsp;#execute()}&nbsp;method.</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;&lt;!--&nbsp;END&nbsp;SNIPPET:&nbsp;pause-method&nbsp;--&gt;</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;@param&nbsp;result&nbsp;the&nbsp;result&nbsp;to&nbsp;return&nbsp;-&nbsp;the&nbsp;same&nbsp;type&nbsp;of&nbsp;return&nbsp;value&nbsp;in&nbsp;the&nbsp;{@link&nbsp;#execute()}&nbsp;method.</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;pause(String&nbsp;result)&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="comment">/**</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;If&nbsp;called&nbsp;first&nbsp;time&nbsp;it&nbsp;will&nbsp;create&nbsp;{@link&nbsp;com.opensymphony.xwork2.TextProviderFactory},</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;inject&nbsp;dependency&nbsp;(if&nbsp;{@link&nbsp;com.opensymphony.xwork2.inject.Container}&nbsp;is&nbsp;accesible)&nbsp;into&nbsp;in,</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*&nbsp;then&nbsp;will&nbsp;create&nbsp;new&nbsp;{@link&nbsp;com.opensymphony.xwork2.TextProvider}&nbsp;and&nbsp;store&nbsp;it&nbsp;in&nbsp;a&nbsp;field</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;for&nbsp;future&nbsp;references&nbsp;and&nbsp;at&nbsp;the&nbsp;returns&nbsp;reference&nbsp;to&nbsp;that&nbsp;field</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*</span>&nbsp;</span></li><li class=""><span><span class="comment">*&nbsp;@return&nbsp;reference&nbsp;to&nbsp;field&nbsp;with&nbsp;TextProvider</span>&nbsp;</span></li><li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">private</span><span>&nbsp;TextProvider&nbsp;getTextProvider()&nbsp;{&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">if</span><span>&nbsp;(textProvider&nbsp;==&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>TextProviderFactory&nbsp;tpf&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;TextProviderFactory();&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">if</span><span>&nbsp;(container&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>container.inject(tpf);&nbsp;&nbsp;</span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span>textProvider&nbsp;=&nbsp;tpf.createInstance(getClass(),&nbsp;<span class="keyword">this</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="keyword">return</span><span>&nbsp;textProvider;&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span><span class="annotation">@Inject</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setContainer(Container&nbsp;container)&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span><span class="keyword">this</span><span>.container&nbsp;=&nbsp;container;&nbsp;&nbsp;</span></span></li><li class="alt"><span>}&nbsp;&nbsp;</span></li><li class=""><span>}&nbsp;&nbsp;</span></li></ol><div class="save_code tracking-ad" data-mod="popu_249" style="display: none;"><a href="javascript:;" target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre class="java" name="code" style="display: none;">package com.opensymphony.xwork2;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;


/**
* Provides a default implementation for the most common actions.
* See the documentation for all the interfaces this class implements for more detailed information.
*/
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {
protected static Logger LOG = LoggerFactory.getLogger(ActionSupport.class);
private final ValidationAwareSupport validationAware = new ValidationAwareSupport();
private transient TextProvider textProvider;
private Container container;


public void setActionErrors(Collection&lt;String&gt; errorMessages) {
validationAware.setActionErrors(errorMessages);
}
public Collection&lt;String&gt; getActionErrors() {
return validationAware.getActionErrors();
}
public void setActionMessages(Collection&lt;String&gt; messages) {
validationAware.setActionMessages(messages);
}
public Collection&lt;String&gt; getActionMessages() {
return validationAware.getActionMessages();
}
/**
* @deprecated Use {@link #getActionErrors()}.
*/
@Deprecated
public Collection&lt;String&gt; getErrorMessages() {
return getActionErrors();
}
/**
* @deprecated Use {@link #getFieldErrors()}.
*/
@Deprecated
public Map&lt;String, List&lt;String&gt;&gt; getErrors() {
return getFieldErrors();
}
//设置表单域校验错误信息
public void setFieldErrors(Map&lt;String, List&lt;String&gt;&gt; errorMap) {
validationAware.setFieldErrors(errorMap);
}
//返回表单域错误校验信息
public Map&lt;String, List&lt;String&gt;&gt; getFieldErrors() {
return validationAware.getFieldErrors();
}
//控制locale的相关信息
public Locale getLocale() {
ActionContext ctx = ActionContext.getContext();
if (ctx != null) {
return ctx.getLocale();
} else {
LOG.debug("Action context not initialized");
return null;
}
}
public boolean hasKey(String key) {
return getTextProvider().hasKey(key);
}
public String getText(String aTextName) {
return getTextProvider().getText(aTextName);
}
//返回国际化信息的方法
public String getText(String aTextName, String defaultValue) {
return getTextProvider().getText(aTextName, defaultValue);
}
public String getText(String aTextName, String defaultValue, String obj) {
return getTextProvider().getText(aTextName, defaultValue, obj);
}
public String getText(String aTextName, List&lt;Object&gt; args) {
return getTextProvider().getText(aTextName, args);
}
public String getText(String key, String[] args) {
return getTextProvider().getText(key, args);
}
public String getText(String aTextName, String defaultValue, List&lt;Object&gt; args) {
return getTextProvider().getText(aTextName, defaultValue, args);
}
public String getText(String key, String defaultValue, String[] args) {
return getTextProvider().getText(key, defaultValue, args);
}
public String getText(String key, String defaultValue, List&lt;Object&gt; args, ValueStack stack) {
return getTextProvider().getText(key, defaultValue, args, stack);
}
public String getText(String key, String defaultValue, String[] args, ValueStack stack) {
return getTextProvider().getText(key, defaultValue, args, stack);
}
//用于访问国际化资源包的方法
public ResourceBundle getTexts() {
return getTextProvider().getTexts();
}
public ResourceBundle getTexts(String aBundleName) {
return getTextProvider().getTexts(aBundleName);
}
//添加错误信息
public void addActionError(String anErrorMessage) {
validationAware.addActionError(anErrorMessage);
}
public void addActionMessage(String aMessage) {
validationAware.addActionMessage(aMessage);
}
添加字段校验的错误信息
public void addFieldError(String fieldName, String errorMessage) {
validationAware.addFieldError(fieldName, errorMessage);
}
//默认Input方法,直接访问input字符串
public String input() throws Exception {
return INPUT;
}
public String doDefault() throws Exception {
return SUCCESS;
}
/**
* A default implementation that does nothing an returns "success".
* &lt;p/&gt;
* Subclasses should override this method to provide their business logic.
* &lt;p/&gt;
* See also {@link com.opensymphony.xwork2.Action#execute()}.
*
* @return returns {@link #SUCCESS}
* @throws Exception can be thrown by subclasses.
*/
//默认处理用户请求的方法,直接返回SUCCESS字符串
public String execute() throws Exception {
return SUCCESS;
}
public boolean hasActionErrors() {
return validationAware.hasActionErrors();
}
public boolean hasActionMessages() {
return validationAware.hasActionMessages();
}
public boolean hasErrors() {
return validationAware.hasErrors();
}
public boolean hasFieldErrors() {
return validationAware.hasFieldErrors();
}
/**
* Clears field errors. Useful for Continuations and other situations
* where you might want to clear parts of the state on the same action.
*/
public void clearFieldErrors() {
validationAware.clearFieldErrors();
}
/**
* Clears action errors. Useful for Continuations and other situations
* where you might want to clear parts of the state on the same action.
*/
public void clearActionErrors() {
validationAware.clearActionErrors();
}
/**
* Clears messages. Useful for Continuations and other situations
* where you might want to clear parts of the state on the same action.
*/
public void clearMessages() {
validationAware.clearMessages();
}
/**
* Clears all errors. Useful for Continuations and other situations
* where you might want to clear parts of the state on the same action.
*/
public void clearErrors() {
validationAware.clearErrors();
}
/**
* Clears all errors and messages. Useful for Continuations and other situations
* where you might want to clear parts of the state on the same action.
*/
//清理错误信息的方法
public void clearErrorsAndMessages() {
validationAware.clearErrorsAndMessages();
}
/**
* A default implementation that validates nothing.
* Subclasses should override this method to provide validations.
*/
//包含空校验的方法
public void validate() {
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
/**
* &lt;!-- START SNIPPET: pause-method --&gt;
* Stops the action invocation immediately (by throwing a PauseException) and causes the action invocation to return
* the specified result, such as {@link #SUCCESS}, {@link #INPUT}, etc.
* &lt;p/&gt;
* &lt;p/&gt;
* The next time this action is invoked (and using the same continuation ID), the method will resume immediately
* after where this method was called, with the entire call stack in the execute method restored.
* &lt;p/&gt;
* &lt;p/&gt;
* Note: this method can &lt;b&gt;only&lt;/b&gt; be called within the {@link #execute()} method.
* &lt;!-- END SNIPPET: pause-method --&gt;
*
* @param result the result to return - the same type of return value in the {@link #execute()} method.
*/
public void pause(String result) {
}
/**
* If called first time it will create {@link com.opensymphony.xwork2.TextProviderFactory},
* inject dependency (if {@link com.opensymphony.xwork2.inject.Container} is accesible) into in,
* then will create new {@link com.opensymphony.xwork2.TextProvider} and store it in a field
* for future references and at the returns reference to that field
*
* @return reference to field with TextProvider
*/
private TextProvider getTextProvider() {
if (textProvider == null) {
TextProviderFactory tpf = new TextProviderFactory();
if (container != null) {
container.inject(tpf);
}
textProvider = tpf.createInstance(getClass(), this);
}
return textProvider;
}
@Inject
public void setContainer(Container container) {
this.container = container;
}
}


</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正如上面代码中的,ActionSupport是一个默认的Action实现类,该类里已经提供了许多默认方法,这些方法包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等,实际上,ActionSupport是Struts2的默认的Action处理类,如果让开发者的Action类继承该ActionSupport类,则会大大简化Action的开发。<br>
</p>
<p>&nbsp;</p>
   
</div>
0 0
原创粉丝点击