首页 > 代码库 > struts2 action详解
struts2 action详解
action映射是struts2框架的基本工作单元,通常,action配置将一个标识符映射到一个业务逻辑的class,当一个请求同action的名字匹配时,框架通过这种映射决定怎么处理请求。一个通常的action如下
<action name="Logon" class="tutorial.Logon">
<result >welcome.jsp</result>
<result name="input">/Logon.jsp</result>
</action>
注意,如果一个action的name中需要有/例如<action name="admin/home" class="tutorial.Admin"/> ,需要在配置文件中struts.xml添加如下<constant name="struts.enable.SlashesInActionNames" value="http://www.mamicode.com/true"/> 同时,action的name中最好别使用.和/ 通常由一个表单连接到一个action用来处理表单提交的数据。
<s:form action="Login">
<s:textfield label="UserName" name="name"/>
<s:submit/>
</s:form>
默认的,action执行时会执行actioin的execute()方法。但是,我们可以手动的指定action的执行方法。
<action name="delete" class="example.CrudAction" method="delete">将会在指派到action时执行action的delete()方法。如果action中没有execute()方法并且也没指定别的方法,则框架会抛出一个异常。
通配符:很多时候,我们需要不同的action name指向同一个class并执行与该action name相关的方法,
<action name="*Crud" class="example.Crud" method="{1}"> 其中*就是通配符,该action可以匹配任何形如*Crud.action的请求,同时执行该action的*方法。例如一个请求如deleteCrud.action,则会执行该actiond的delete()方法。*可以在name的任意位置如Crud_*。当我们需要为这种通配符方式的action使用校验框架或转换框架时时,可以这样 Crud_input-validation.xml Crud_delete-conversion.xml 动态方法调用:我们可以在填写表单的action时使用例如Login!login.action动态的指派调用Login的login方法。不过,还是推荐使用通配符的方式进行动态匹配。因为使用通配符方式可以为不同的请求单独的建立检验文件等
如果一个action的class属性未指定,则默认将com.opensymphony.xwork2.ActionSupport 作为class属性
<action name="Hello">
//....</action> ActionSupport类有一个execute()方法返回SUCCESS和一个input()方法返回INPUT,我们可以通过
在packaeg里写上<default-class-ref name=”default.class”>指定我们自定义的默认类
默认action:有时候请求的action没有找到,服务器就会返回404错误,我们可以指定一个默认action,当所有其他的action都没匹配上时就会执行那个默认的action。方法如下
<package name="Hello" extends="action-default">
<default-action-ref name="UnderConstruction">
<action name="UnderConstruction">
<result>/UnderConstruction.jsp</result>
</action>
</package>
我们可以在不同的package中定义不同的默认action,但是一个命名空间只能指定一个默认action
一个好习惯就是永远不要从一个页面直接链接到另一个页面,而是通过action链接到别的页面。我们可以通过通配符的方式实现
<action name="*">
<result>/{1}.jsp</result>
</action>
关于通配符的使用*代表一或多个字符除了/
**代表一或多个字符包括/
若想在在action name中使用特殊字符例如*而不是用*来表示匹配可以用 \ 来转义。例如\*name就代表名字为*name的action
struts2 action详解