【strust2】Action的配置

来源:互联网 发布:算法导论吧 编辑:程序博客网 时间:2024/06/07 10:09

       Action只是一个逻辑控制器,它并不生成任何响应,因此,Action处理完用户请求后,Action需要将指定的视图资源呈现给用户,因此配置Action时需要配置逻辑视图和物理视图之间的的对应关系.下面就是一个Action配置片段

    
<package name="tgb" extends="struts-default"><action name="Action" class="tgb.action.Action" ><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/success.jsp</result>    </action></package>

       在同一个表单中我们可能会遇到这样的一个问题,同一个表单中不同的按钮需要Action的不同方法来处理,但是我们知道一个表单的提交只会提交到一个Action中.面对这种情况我们可以使用动态方法调用,让一个Action包含多个处理逻辑,这便是动态方法调用,下面我们就来看看Action是如何实现动态方法调用的.


制定method

        动态方法调用是指表单元素的Action并不是直接等于某个Action,而是以如下形式来指定表单的action属性.

        

<!--action属性为actionName!methodName的形式,其中ActionName指定提交到那个Action,而methodName指定提交到指定的方法-->action="ActionName!methodName"

        除了使用上面的方法,我们还可以使用method属性来让Action调用指定的方法.而不是使用默认的execute方法来处理用户请求

<!-- 定义url为login时,处理请求的为loginAction中的login方法--><action name="login" class="tgb.action.LoginAction" method="login"></action>

使用通配符

       在Action的配置中,我们有时会发现很多的Action在配置时其实配置文件基本上是相同的,可见这样就非常的冗余,为了解决这个问题,struts2提供了另一种形式的动态方法调用:通配符。

        在配置<action.../>元素时,允许在指定name属性时使用模式字符串(即用“*”代表一个或多个任意字符),接下来就可以在Class、method属性及<rresult.../>中使用{N}来代表第N个星号(*)所匹配的字串。

       

<struts><package name="tgb" extends="struts-default"><action name="*Action" class="tgb.action.LoginRegistAction" method="{1}"><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/success.jsp</result>    </action></package></struts>
         在上面的Action配置中,如果我们的请求地址为LoginAction,则说明 星号代替的是字符Login,所以{1}处的属性值为Login,也由此说明该请求将使用LoginRegistAction中的Login方法处理该请求。

       

请求的判断

              当我们使用通配符来配置Action的时候,可以会出现用户请求的URL同时匹配多个Action,这个时候要用那个Action来处理用户请求呢?

          假设有URL为abcAction.action的请求,在struts.xml中配置了如下三个Action,name值为abcAction、*Action、*,这个请求将用abcAction来请求。如果请求地址为defAction,则按先后顺序来决定那个Action来处理用户请求。


配置默认Action和默认Action处理类

     当用户请求找不到对应的Action时,可以通过<default-action-ref.../>使用默认的Action即将处理用户请求,该元素包含一个name属性,该属性指向容器中另一个有效的Action,该Action将成为默认的Action

下面配置了一个默认的Action,

        

<package name="tgb" ><!--配置一个默认的Action,--><default-action-ref name="Action"/><action name="Action" class="tgb.action.Action" ><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/success.jsp</result>    </action></package>
      

         同样的道理,我们也可以配置默认的Action的默认处理类,配置Action的默认处理类使用<default-class-ref.../>配置时只需指定一个class属性,该Action属性指定的类就是Action的默认处理类。

        

<package name="tgb" ><!--配置一个默认的Action处理类,--><default-class-ref class="tgb.action.ActionSupport"/></package>

        

       通过上面的总结,我们可以看到Action的配置其实很简单的,我们只需要在struts.xml文件中配置action标签的几个属性,struts2就可以帮助我们处理我们的请求。

1 0
原创粉丝点击