struts2笔记2.3

7.Action中的method属性

struts1.x中我们知道通过继承DispatchAction可以实现把多个Action进行统一操作,在struts2中实现action的统一操作也很简单。我们以crud操作为例,把crud集中到一个Action中。
步骤一、建立CRUDAction,内容如下:
package com.asm;

import com.opensymphony.xwork2.ActionSupport;

public class CRUDAction extends ActionSupport {

    public String add() {

       return "success";

    }

    public String del() {

       return "success";

    }

    public String update() {

       return "success";

    }

    public String query() {

       return "success";

    }

}

步骤二、配置此Action,为了清晰明了,专为此Action,建立一个配置文件crud.xml,主要内容如下:
<struts>

    <package name="crud" extends="struts-default" namespace="/crud">

       <action name="add" class="com.asm.CRUDAction" method="add">

           <result name="success">/crud/addSuccess.jsp</result>

       </action>

       <action name="del" class="com.asm.CRUDAction" method="del">

           <result name="success">/crud/delSuccess.jsp</result>

       </action>

       <action name="update" class="com.asm.CRUDAction" method="update">

           <result name="success">/crud/updateSuccess.jsp</result>

       </action>

       <action name="query" class="com.asm.CRUDAction" method="query">

           <result name="success">/crud/querySuccess.jsp</result>

       </action>

    </package>

</struts>

分析:上面的method方法的值来源于CRUDAction中方法的名字,这样当我们访问上面的每一个Action时,它实质是和method指定的方法关联上。

步骤三、把crud.xml配置文件并入struts.xml中,只需增加如下代码:
<include file="jack.xml"></include>

步骤四、编写相应的jsp页面,在此略去crud文件夹下的四个跳转jsp页面(addSuccess.jsp),重点是crud.jsp页面。内容如下:
<html>

<%

    String path=request.getContextPath();

%>

    <body>

       <a href="<%=path %>/crud/add.action">添加数据</a><br>

       <a href="<%=path %>/crud/del.action">删除数据</a><br>

       <a href="<%=path %>/crud/query.action">查询数据</a><br>

       <a href="<%=path %>/crud/update.action">修改数据</a><br>

    </body>

</html>
步骤五、发布测试。
补充扩展,动态调用DMI不使用method实现统一.我们在crud.xml中增加如下内容:
<action name="op" class="com.asm.CRUDAction">

           <result name="success">/crud/op.jsp</result>

</action>

然后再在crud.jsp中定义如下链接:

<a href="<%=path %>/crud/op!add.action">添加数据</a><br>

<a href="<%=path %>/crud/op!del.action">删除数据</a><br>

<a href="<%=path %>/crud/op!query.action">查询数据</a><br>

<a href="<%=path %>/crud/op!update.action">修改数据</a><br>

注意查看上面的链接地址,它们都是针对op action,然后再加地上“!+CRUDAction中相应的方法名”,最后再写上.action即可以访问到统一页面op.jsp。这样做虽然能减少页面,但是由于它们实质用到的是同一个Action,所以这就意味着我们要使用的拦截器相同,相同的跳转result。实际中这种方式很少使用,在此略作了解。如果不想使用动态方法调用,我们可以通过常量来关闭,即在struts.xml中增加如下配置:
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>

扩展2CRUDAction中使用do。举例:我们在CRUDAction中增加一个新的方法,内容如下:

    public String doMain(){

       return "success";

    }

然后再在在crud.xml中增加如下内容:

<action name="main" class="com.asm.CRUDAction" method="main">

           <result name="success">/crud/main.jsp</result>

</action>
注意:配置中method属性值是doMain中去掉doM小写。然后再在crud.jsp中增加如下链接:
<a href="<%=path %>/crud/main.action">main页面</a><br>

随后便可以访问到.../crud/main.jsp页面了。

8.使用ForwardAction实现页面屏蔽。

我们在jsp页面之间写链接总会是.../xxx.jsp,而如果我们想屏蔽掉具体的jsp,只需要所jsp页面配置成一个ForwardAction即可实现。示例如下:在根目录下有一个index.jsp主页,我们strtus.xml中作如下配置:

<package name="def" extends="struts-default">   

       <action name="forward">

           <result >/index.jsp</result>

       </action>

</package>

说明:如果没有未action指定class,默认就是ActionSupport类,如果没有为action指定method属性,则默认执行execute方法,如果没有指定resultname属性,默认值为success。知道了这些再结合ActionSupport的源码就不难理解实现转发的原理了。
随后再在前面7点扩展中用到的op.jsp中增加如下代码:
<a href="<%=request.getContextPath()%>/forward.action">forward</a>

最后再测试访问op.jsp,在op.jsp中页面中直接点链接便可以跳到index.jsp,观察地址栏发现此时跳到index页面是进行的服务器跳转,如果我们在上面的配置中的result增加type属性变成<result type="redirect">/index.jsp</result>,实现的跳转就是客户端跳转。 补充:像这种forward形式的action实质是执行的ActionSupport 这个Action。因此配置它的result可以参看此类的api文档,比如它常用的result name有:successlogininput等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值