如果为action配置了类,那么默认就会执行Action类的excute方法,Action类的写法三种:

public class Action1 {

public String execute(){
        return "abc";//根据返回结果,去xml文件中找name与之匹配的result
    }
   
}

import com.opensymphony.xwork2.Action;//ActionSupport类实现了该接口

public class Action2 implements Action {

@Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return "success";
    }

}

import com.opensymphony.xwork2.ActionSupport;

public class Action3 extends ActionSupport {

@Override
    public String execute(){
        // TODO Auto-generated method stub
        return "success";
    }
}

推荐使用第三种。

调用Action类的指定方法可以在xml中配置(以下文件三处蓝字代表三种方法):

struts.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>

<constant name="struts.devMode" value="true" />
    <constant name="struts.i18n.encoding" value="GBK" /> <!-- internationalization -->

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

<action name="hello"><!-- 当不配置class的时候,会调用默认的ActionSupport类 (xwork框架中的类)-->
            <result>
                /Hello.jsp
            </result>
        </action>
       
        <action name="act1" class="test.Action1">
            <result name="success">/ActionS.jsp</result>
            <result name="failure">/ActionF.jsp</result>
            <result name="abc">/Hello.jsp</result>
        </action>
       
       <action name="act2" class="test.Action2">
            <result name="success">/ActionS.jsp</result>
            <result name="failure">/ActionF.jsp</result>
            <result name="abc">/Hello.jsp</result>
        </action>
    </package>

<package name="user" extends="struts-default" namespace="/user">
        <action name="userAdd" class="test.UserAction"method="add">
        <!--
       调用方法由execute改为add方法,在jsp页面中链接后边加上!add也可以达到同样效果。推荐后者。
        后者又称DMI Dynamic Method Invoke 动态方法调用
        在jsp中写法例子:
            <% String context = request.getContextPath(); %>
            <a href="<%=context %>/user/user!add">添加用户</a>
         -->
            <result>/userAddSuccess.jsp</result>
        </action>
    </package>
   
    <!-- 通配符示例,使用通配符要遵守“约定优于配置”的原则 –>

<!-- 关于*号的匹配:如果地址栏中的action名在配置文件中找不到同名的action名,

则对有*号的可以匹配的action名,优先匹在配置文件中书写位置靠上的action -->
    <package name="actions" extends="struts-default" namespace="/actions">
        <action name="Student*" class="test.struts2.action.StudentAction" method="{1}">
            <result>/Student{1}_success.jsp</result>
        </action>
       <!-- {1}就代表name中的第一个*,以此类推 -->
        <action name="*_*" class="test.struts2.action.{1}Action" method="{2}">
            <result>/{1}_{2}_success.jsp</result>
            <!-- {0}_success.jsp -->
        </action>
    </package>
</struts>

使用Action类中指定的方法如果需要参数有以下三种方式:

直接在jsp的链接中写:“/user!add?name=a&age=8”就可以把参数传递到下面的Action中

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
   
    private String name;
    private int age;
   
    public String add() {
        System.out.println("name=" + name);
        System.out.println("age=" + age);
        return SUCCESS;
    }

public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }

public int getAge() {
        return age;
    }

public void setAge(int age) {
        this.age = age;
    }
}

使用Domain Model接收参数<a href="user/user!add?user.name=a&user.age=8">添加用户</a>

这种方式对应的Action:

import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
   
   private User user;
    //private UserDTO userDTO;
    public String add() {
        System.out.println("name=" + user.getName());
        System.out.println("age=" + user.getAge());
        return SUCCESS;
    }

public User getUser() {
        return user;
    }

public void setUser(User user) {
        this.user = user;
    }
   
}

public class User {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

使用ModelDriven接收参数<a href="user/user!add?name=a&age=8">添加用户</a>

也可以用下面的Action

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<User>{//此处要指定清楚
    
    private User user = new User(); //需要自己new   
    
    public String add() {
        System.out.println("name=" + user.getName());
        System.out.println("age=" + user.getAge());
        return SUCCESS;
    }

@Override
    public User getModel() {
        return user;
    }
   
}

public class User {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

struts 页面调用Action的指定方法并传递参数的更多相关文章

  1. 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值

    接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码 ...

  2. [Xcode 实际操作]八、网络与多线程-(18)PerformSelector消息处理方法:由运行时系统,负责去调用对象的指定方法

    目录:[Swift]Xcode实际操作 本文将演示PerformSelector消息处理方法. 在项目文件夹上点击鼠标右键弹出文件菜单. [New File]->[Swift File]-> ...

  3. WeChat-SmallProgram:引用页面调用组件内的方法

    如何创建组件 及 使用 这里不在多说:请参考之前文章 如何定义一个组件 自定义select下拉选项框组件使用 引用组件: <sub-unit-select id="init" ...

  4. Groovy小结:java调用Groovy方法并传递参数

    Groovy小结:java调用Groovy方法并传递参数 @(JAVA总结) 1. 场景描述 在网上查了资料发现,java有三种方式调用groovy脚本.但是真正在实际的服务器环境中,嵌入groovy ...

  5. 利用Ajax调用controller方法并传递参数

    一.背景由于近期工作需要将人脸识别功能与选课系统结合,但是对前端知识了解的很少,只能边做边学了,因此在这边把遇到的一些坑说明一下,希望能帮助到像我一样的初学者 二.具体内容这里采用框架为MVC,如果想 ...

  6. .net中用Action等委托向外传递参数

    原文:.net中用Action等委托向外传递参数      一般我们可以使用ref,out达到向外传递参数目的. Action<T>是一个特殊的委托,除了常规应用.我们还可以用它来实现简单 ...

  7. odoo14 button 事件调用python方法如何传递参数

    1 <field name="user_ids" 2 mode="kanban" 3 nolabel="1" 4 options=&q ...

  8. SSH框架下ajax调用action并生成JSON再传递到客户端【以get和post方式提交】

    需要完成的任务: 主要是把JSP页面上图片ID传给服务器端,服务器读取cookie看是否有username,如果有则根据ID读取MongoDB数据库,读出图片URL,再存放到mysql中的collec ...

  9. python调用jenkinsAPI构建jenkins,并传递参数

    安装jenkins 安装jenkins很简单,可以用多种方式安装,这里知道的有: 在官网下载rpm包,手动安装,最费事 centos系统通过yum安装,ubuntu通过apt-get安装(不推荐,因为 ...

随机推荐

  1. Topcoder Srm 671 Div2 1000 BearDestroysDiv2

    \(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...

  2. [BZOJ3000]Big Number(斯特林公式)

    求n!在k进制下的位数,n<=1e18 斯特林公式:$n!\approx \sqrt{2\pi n}(\frac{n}{e})^n$ 在n很大的时候有较好的精度保证. $\log_{k}n!+1 ...

  3. 【SAM】codevs3160-最长公共子串

    [题目大意] 求两个字符串的最长公共子串. [思路] 对第一个字符串建立后缀自动机,第二个字符串去匹配.cnt记录当前最长公共子串的长度,而ret记录答案. p代表位置指针,初始在rt位置. 对于第二 ...

  4. 【KMP】BZOJ3942-[Usaco2015 Feb] Censoring

    [题目大意] 有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程.输出最后的S串. [思路]三 ...

  5. 【概率DP】BZOJ4318-OSU!

    [题目大意] 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串.在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含( ...

  6. 【动态规划】mr351-办签证

    [题目大意] xuzhenyi要办个签证.办证处是一座M层的大楼,1<=M<=100. 每层楼都有N个办公室,编号为1..N(1<=N<=500).每个办公室有一个签证员. 签 ...

  7. 20162303实验二 Java面向对象程序设计实验报告

    北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级: 1623 姓名: 石亚鑫 学号:20162303 成绩: 2分 指导教师:娄家鹏 王志强 实验日期:4月14日 实验密 ...

  8. Maven打war包时,添加本地jar包

    1.在项目根目录中新建lib文件夹,添加jar包 2.在pom.xml文件中添加dependency <dependency> <groupId>com.oracle</ ...

  9. [bzoj1011](HNOI2008)遥远的行星(近似运算)

    Description 直 线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量, ...

  10. [转]Spring Security 可动态授权RBAC权限模块实践

    RBAC:基于角色的访问控制(Role-Based Access Control) 先在web.xml 中配置一个过滤器(必须在Struts的过滤器之前) <filter> <fil ...