struts中几种常用的Action(二)

2. 使用LookupDispatchAction
LookupDispatchAction也是DispatchAction 的一种,但它的处理更加简单。该Action也可包含多个处理方法,它可让处理方法与按钮直接关联,无须使用任何的JavaScript脚本。
使用LookupDispatchAction时,提交按钮必须使用Struts 的html 标签,下面是该示例按钮部分的源代码:
<td>
<html:submit property="method">
<bean:message key="button.add">
</html:submit>
<html:submit property="method">
<bean:message key="button.modify">
</html:submit>
<input type="reset" value='<bean:message key="button.reset">>
<td>
代码中两个提交按钮分别增加了property 属性,该属性的值为method。

而在action的配置中,也使用parameter作为参数,看下面的action 配置代码:
<action path="/login" type="lee.LoginAction" name="loginForm"
scope="request" validate="true" input="/login.jsp"

 parameter="method">
<forward name="success" path="/welcome.jsp"l>
</action>
这段配置代码表明:该action 也根据method 参数来区分请求分别调用哪个方法,此时无须使用method 的隐藏域,而是将按钮的property 设为method。通过这种方式可以避免书写JavaScript脚本
因此可通过重写getKeyMethodMap方法完成按钮与Action 中方法的关联,下面是该Action 的源代码:
public class LoginAction extends LookupDispatchAction

用于关联按钮和方法
protected Map getKeyMethodMap()
Map map = new HashMap();
如果按钮标题的key 为button.add. 则提交该按钮时对应add 方法
map .put ("button. add" , "add");
如果按钮标题的key 为button.modify. 则提交该按钮时对应modify 方法
map.put ("button.modify" , "modify") ;
return map;

第一个处理逻辑
public ActionForward add(ActionMapping mapping, ActionForm form ,
HttpServletRequest request , HttpServletResponse response)
throws Exception
System.out.println(" 增加")
request.setAttribute("method" , "增加") ;
return mapping.findForward(" success") ;
}
第二个处理逻辑
public ActionForward modify(ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response)
throws Exception
System.out.println("修改") ;

 

 request.setAttribute(" method","修改") ;
return mapping.findForward("success");
LookupDispatchAction必须重写getKeyMethodMap方法,该方法返回一个Map 对象,
并在该对象内保存了按钮标题与方法之间的对应。 

4 使用ForwardAction


如果需要从一个页面或资源转换到另一个资源时,直接使用页面资源路径的超级链接定位不是好的做法,这使得控制器没有机会处理相关的请求事直。
使用ForwardAction可以完成请求的转发,当控制器调用ForwardAction的perform方法时,它会使用属性parameter 所设定的路径进行forward 的动作。下面是一个设定
ForwardAction的例子:
<actlon-mapplngs>
<action path="/welcome"
type="org.apache.struts.actions.ForwardAction"
parameter="/welcome.jsp"/>
</action-mappings>
该action 仅仅完成转发,并没有执行其他的额外动作。
页面控制转发的代码如下:
<a href="welcome.do">转入</a>
当单击转入超级链接时,将可以转向ForwardAction中parameter指向的资源。当然也可以直接是用action来完成。

 
5、使用IncludeAction
IncludeAction的用法与ForwardAction的用法比较相似,区别在于ForwardAction将跳转到action 定义的资源,而IncludeAction用于引入该action 对应的资源。
下面是IncludeAction定义的源代码:
<action-mappings>
<action path="/welcome"
type="org.apache. struts.actions. IncludeAction"
parameter="/welcome.jsp"/>
</action-mappings>

该action 用于经welcome.jsp 作为资源导入。
页面中负责加载该action 所导入资源的代码如下:
<jsp:include page="welcome.do"/><br>
上面的代码将会把welcome action 定义的资源导入该页面。

 


5、 使用SwitchAction
SwitchAction 主要用于模块之间的切换。当一个应用之中存在多个模块时,使用SwitchAction在不同模块之间的action 之间切换还是相当方便的。
在下面的web.xml 中,加载了Struts 的两个配置文件,其中一个作为系统的一个模块加载,该web.xml 的配置代码如下:
<servlet>
<! 定义Struts 的核心控制器-->
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!--指定Struts 的第一个配置文件-->
<lnlt-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-con工fg.xml</param-value>
</Inlt-param>
<!一指定Struts 的第二个配置文件,作为wawa 模块配置一〉
<lnlt-param>
<param-name>config/wawa</param-name>
<param-value>/WEB-INF/struts-configl.xml</param-value>
</Init-param>
<load-on-startup>2</load-on-startup>
</servlet>
该应用包括了一个wawa 的模块,并在struts-config1.xml 文件中配置一个action,该
action 的配置代码如下:
<action-mappings>
<action path="/welcome" forward="/welcome.jsp"/>
</action-mappings>
该action 的定义非常简单,仅完成页面的转向。如果现在需要从应用的页面请求该action,可以使用如下SwitchAction。
定义SwitchAction也相当简单,只需要定义path、type 属性即可。下面是SwitchAction的定义代码:
<action-mappings>
<action path="/moduleSwitch" type="org.apache.struts.actions.SwithcAction"/>
</action-mappings>
在使用SwitchAction 时,必须在请求中带两个参数:第一个是prefix,用来指定模块宅称:另一个是page,用来指定相模块中的资源路径。下面是页面中超级链接对wawa
模块的welcome action 请求,页面的超级链接代码如下:
<a href=”moduleSwitch.do?prefix=/wawa&page=/welcome.do">转入另一个模块</a>
上面的超级链接地址中,/wawa是模块名,而page对应wawa模块下的welcome的actiono

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值