• Struts2的Action编写


    Action的编写的方式:

    第一种方式:

      Struts2的Action编写的最简单的方式就是写一个普通类,不继承自任何类,也不实现接口。如下:

     1 package cn.geore.action;
     2 
     3 public class OneAction {
     4     /**
     5      * 在Servlet中每次执行的是service方法,而在Struts2种每次调用执行的方法是execute()
     6      * 因此对于具体的功能只需要卸载execute()中即可
     7      * @return
     8      */
     9     public String execute() {
    10         return "first";
    11     }
    12     
    13     public String add() {
    14         return "add";
    15     }
    16 }

    第二种方式:

      创建一个普通类,然后实现Action接口。

     1 package cn.geore.action;
     2 
     3 import com.opensymphony.xwork2.Action;
     4 
     5 public class TwoAction implements Action {
     6 
     7     @Override
     8     public String execute() throws Exception {
     9         return "success";
    10     }
    11 
    12 }

      Action接口的常量值:

     1  /**
     2      * 成功,返回sucess。可以调用它,也可以在Action类中的execute方法中直接return "success";
     3      */
     4     public static final String SUCCESS = "success";
     5 
     6     /**
     7      * The action execution was successful but do not
     8      * show a view. This is useful for actions that are
     9      * handling the view in another fashion like redirect.
    10      */
    11     public static final String NONE = "none";
    12 
    13     /**
    14      * The action execution was a failure.
    15      * Show an error view, possibly asking the
    16      * user to retry entering data.
    17      */
    18     public static final String ERROR = "error";
    19 
    20     /**
    21      * The action execution require more input
    22      * in order to succeed.
    23      * This result is typically used if a form
    24      * handling action has been executed so as
    25      * to provide defaults for a form. The
    26      * form associated with the handler should be
    27      * shown to the end user.
    28      * <p/>
    29      * This result is also used if the given input
    30      * params are invalid, meaning the user
    31      * should try providing input again.
    32      */
    33     public static final String INPUT = "input";
    34 
    35     /**
    36      * The action could not execute, since the
    37      * user most was not logged in. The login view
    38      * should be shown.
    39      */
    40     public static final String LOGIN = "login";
    View Code

     

    第三种方式:

      创建类,继承父类ActionSupport

     1 package cn.geore.action;
     2 
     3 import com.opensymphony.xwork2.Action;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 
     6 public class ThreeAction extends ActionSupport {
     7     @Override
     8     public String execute() throws Exception {
     9         // .....
    10         return Action.SUCCESS;
    11     }
    12 }

    Action类方法的访问:

      对于Action类的方法,在默认的情况下,在每次执行的时候,默认访问的多是execute()方法,如果要访问其他的方法,Struts2提供了三种方式进行方法的访问。对于Action类的方法,如果又返回值的时候就必须是String类型。如果方法不返回,可以使用void修饰,但是不建议这么写,一般使用return "none";表示返回为空,如下: 

     1 // 无返回值的时候建议这样子定义
     2 public String add() {
     3     // ......
     4     return Action.NONE;
     5 }
     6     
     7 // 有返回值的时候,返回值必须为String类型
     8 public String update() {
     9         // ......          
    10     return Action.SUCCESS;
    11 }

      

      定义一个BookAction类,在使用下面的三种方式实现对这个类方法的访问:

     1 package cn.geore.bookaction;
     2 
     3 import com.opensymphony.xwork2.Action;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 
     6 public class BookAction extends ActionSupport {
     7     // 添加图书
     8     public String addBook() {
     9         System.out.println("添加图书...");
    10         return Action.NONE;
    11     }
    12     
    13     // 更新图书
    14     public String updateBook() {
    15         System.out.println("删除图书...");
    16         return Action.NONE;
    17     }
    18 }

      第一种方式:在struts2的核心配置文件中,action标签的method属性决定调用Action类的哪一个方法。

      book.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!-- method配置 -->
        <package name="bookaction" extends="struts-default" namespace="/book">
            <action name="addBook" class="cn.geore.bookaction.BookAction" method="addBook">
                <!-- <result name="success">/jsps/one/addBook.jsp</result> -->
            </action>
            
            <action name="updateBook" class="cn.geore.bookaction.BookAction" method="updateBook">
                <!-- <result name="success">/jsps/one/updateBook.jsp</result> -->
            </action>
        </package>
    </struts>

      struts.xml:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 <struts>
     6     <constant name="struts.i18n.encoding" value="UTF-8"></constant>
     7     <!-- 引入外部的Struts模块的配置文件 -->
     8     <!-- <include file="cn/geore/action/one.xml"></include> -->
     9     <include file="cn/geore/bookaction/book.xml"></include>
    10 </struts>

    运行截图:

      第二种方式:使用通配符的方式实现方法的访问

         对于第一种方式,我们在package标签中,要配置action,每一个方法均要配置一个action,如果对于一个很多方法的开发,那么就要写非常多的action配置。那么这样写无疑是比较麻烦的,而Struts2的通配符方式就可以解决这个问题。

      使用的方式:在action标签的name属性,给name属性的值一个*号(星号表示匹配任意的内容)。  

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!-- 通配符配置 -->
        <package name="bookaction" extends="struts-default" namespace="/book">
            <!-- 
                name = book_*;这个表示action接收所有以book_开始的任意的字符串
                method中的{1},表示取得第一个占位符的值,也就是去的book_*的*所表示的值。
            -->
            <action name="book_*" class="cn.geore.bookaction.BookAction" method="{1}">
                <!-- 
                    <result name="update">/jsps/one/updateBook.jsp</result>
                    <result name="add">/jsps/one/addBook.jsp</result> 
                -->
            </action>
        </package>
    </struts>

      

      第三种方式:动态访问的方式访问方法

       

      

  • 相关阅读:
    1017.陶陶装苹果
    1084.爬楼梯加强版
    1056.A ^ B Problem 快速幂算法。
    1074.我们喜欢递归的斐波那契数列
    1073.我们喜欢递归的阶乘
    1046 没过
    python 基本常用数据类型
    yii2.0 数据库查询操作
    python 随便笔记
    搭建自己的koa+mysql后台模板
  • 原文地址:https://www.cnblogs.com/geore/p/7526934.html
Copyright © 2020-2023  润新知