ActionMapping的一个实例对应了struts-config.xml文件中的一个<action>标签。其比较重要的几个属性有path,type,name,scope,input,forward,unknown等。
path为其访问路径,type是action类型,name为ActionForm的name,scope是将信息设置到request或者session中。这些都比较简单。重点说一下forward和input属性。
forward属性,Action为逻辑控制器,如果我们有转向信息而没有逻辑代码时,我们一般的做法是建立一个Action,里面只写一句转向信息的代码,如果有很多这样的Action,那么操作将非常繁琐,这时可以利用forward属性来配置其转向信息,而不用建立一个action类。使用forward属性有利于体现配置文件的完整性,应尽量使用。
unknown属性,这个是一个缺省配置,当输入的url找不到时,会跳转到unknown页面,unknown属性设置是一个页面的路径。
input属性,这个属性和异常有关系,当出现错误时,我们原来是跳转到错误页面,用input可以实现同样的效果。看代码。
<action path="/login_struts_tag"
type="com.bjpowernode.struts.LoginAction"
name="loginForm"
scope="request"
input="/login_struts_tag.jsp"
>
<forward name="success" path="/login_success.jsp" />
<!--
<forward name="error" path="/login_error.jsp"/>
-->
</action>
在Action中代码则改变为Return mapping.getInputForward();,和原来return mapping.findForward("error");效果一样。
DispatchAction类
DispatchAction类继承自Action类,是一种特殊的Action类。在用Action的时候,有的时候会创建很多的Action类,这时候可以用DispatchAction类来将不同的Action类化成不同的方法。即用一个DispatchAction类可以完成多个方法。
在用这个类的时候,首先要在struts-config.xml文件中的action标签多写一个parameter属性,因为在界面写访问路径的时候要带有参数,才能在DispatchAction中判断调用什么方法。配置代码为
<action path="/user/user_maint"
type="com.bjpowernode.drp.web.actions.UserAction"
name="userForm"
scope="request"
parameter="command"
parameter的含义为命令的关键字是什么,即在界面代码action ="user_maint.do?command=del";这个关键字可以替换。parameter中的值不能是execute和perform。
在得到del后,在DispatchAction中写的方法名称必须和这个一样。才能调用到这个方法上。
在DispatchAction中还有一个unspecified方法,即界面不传任何参数的时候调用到这个方法上。
DispatchAction中的execute方法,如果需要覆盖,必须显示调用。