一、Action接受参数的方式

1、属性方式接收

首先编写一个用于上传参数的页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="Login.action" method="post">
<table>
<tr>
<td>用户名:</td><td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td><td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center"><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>

action的xml配置

        <action name="Login" class="LoginAction">
<result name="success">/WEB-INF/jsp/success.jsp</result>
<result name="login">/index.jsp</result>
</action>

此form的“action”的值必须和xml配置的acting的“name”一样,input的“name”的值和LoginAction的属性名一致

成功跳转的页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<h1>${username}登录成功!</h1>
</body>
</html>

使用的EL表达式也要和action类的属性名称一致

action类代码

public class LoginAction extends ActionSupport {

    private String username;//用户名-必须与页面请求的对应表单name值相同

    private String password;//密码-必须与页面请求的对应表单name值相同

    public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception {
if (username.equals("admin") && password.equals("123456")) {
return SUCCESS;
} else {
return LOGIN;
}
}
}

必须要设置属性的get,set方法

2、使用JavaBean方式接收

请求页面

<form action="JavaBean.action" method="post">
<table>
<tr>
<td>用户名:</td><td><input type="text" name="user.loginName"></td>
</tr>
<tr>
<td>密码:</td><td><input type="password" name="user.password"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center"><input type="submit" value="登录"></td>
</tr>
</table>
</form>

aciton配置

        <action name="JavaBean" class="UserAction">
<result name="success">/WEB-INF/jsp/success1.jsp</result>
<result name="login">/index1.jsp</result>
</action>

JavaBean代码

public class User {
private String loginName; private String password; public String getLoginName() {
return loginName;
} public void setLoginName(String loginName) {
this.loginName = loginName;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}

action类代码

public class UserAction extends ActionSupport {
private User user;//JavaBean对象-提交页面的user.loginname表示此属性名及此对象的内部属性名 @Override
public String execute() throws Exception {
System.out.println(this.user.getLoginName() + "|" + this.user.getPassword());
if ("admin".equals(user.getLoginName()) && "123456".equals(user.getPassword())) {
return SUCCESS;
} else {
return LOGIN;
}
} //必须设置get和set方法
public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}

请求成功页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<h1>${user.loginName}登录成功JavaBean!</h1>
</body>
</html>

3、使用ModelDriven方式接收参数

请求页面

<form action="ModelDriven.action" method="post">
<table>
<tr>
<td>用户名:</td><td><input type="text" name="loginName"></td>
</tr>
<tr>
<td>密码:</td><td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center"><input type="submit" value="登录"></td>
</tr>
</table>
</form>

使用ModelDriven可以直接使用javabean的属性名称

action配置

        <action name="ModelDriven" class="ModelDrivenAction">
<result name="success">/WEB-INF/jsp/success2.jsp</result>
<result name="login">/index2.jsp</result>
</action>

action类代码(JavaBean代码同上略)

public class ModelDrivenAction extends ActionSupport implements ModelDriven<User> {
private User user; @Override
public User getModel() {
//先支持此方法赋值,ModelDriven是通过getModel方法获取action中JavaBean对象,然后将用户提交数据赋值到此对象内
//必须手动创建javabean对象,不需要设置get,set放过
user = new User();
user.setLoginName("测试");
return user;
} @Override
public String execute() throws Exception {
System.out.println(this.user.getLoginName() + "|" + this.user.getPassword());
if ("admin".equals(user.getLoginName()) && "123456".equals(user.getPassword())) {
return SUCCESS;
} else {
return LOGIN;
}
}
}

请求成功页面及输出结果

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<h1>${loginName}登录成功ModelDriven!</h1>
</body>
</html>

二、action的method属性

1、一个acton可以配置多个方法,此时可以通过配置action的method属性来调用action类的不同方法

action配置

        <action name="UserAdd" class="UserAction" method="addUser">
<result>/index1.jsp</result>
</action> <action name="UserDel" class="UserAction" method="delUser">
<result>/index1.jsp</result>
</action>

action类

public class UserAction extends ActionSupport {
public String addUser(){
System.out.println("addUser");
return SUCCESS;
} public String delUser(){
System.out.println("delUser");
return SUCCESS;
}
}

请求页面

<form action="UserAdd.action" method="post">
<input type="submit" value="登录">
</form>
<form action="UserDel.action" method="post">
<input type="submit" value="登录">
</form>

2、动态方法调用

动态调用需要设置struts2的参数

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

如果是struts2.5的版本还需要设置global-allowed-methods

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/> <package name="default" namespace="/" extends="struts-default">
<global-allowed-methods>regex:.*</global-allowed-methods> <action name="User" class="UserAction">
<result>/index1.jsp</result>
</action>
</package>
</struts>

请求页面

<form action="User!addUser.action" method="post">
<input type="submit" value="添加">
</form>
<form action="User!delUser.action" method="post">
<input type="submit" value="删除">
</form>

action类同上略

三、使用通配符配置action

请求页面

<form action="User_addUser.action" method="post">
<input type="submit" value="添加">
</form>
<form action="User_delUser.action" method="post">
<input type="submit" value="删除">
</form>
<form action="User_other.action" method="post">
<input type="submit" value="删除">
</form>

action配置

        <!--优先完全匹配,找不到才回去通配符匹配-->
<action name="User_addUser" class="UserAction">
<result>/index1.jsp</result>
</action> <action name="User_*" class="UserAction" method="{1}">
<result>/index1.jsp</result>
</action>

Struts2-Action接受参数方式、method属性使用及通配符的配置的更多相关文章

  1. 【代码总结】Struts2 Action接受参数方式的对比

    一.属性方式 1.Action中:对应表单参数的setter.getter 2.页面中  :Form中元素name取值属性名 <s:property value="属性名" ...

  2. [转]Struts2理解--动态方法和method属性及通配符_默认Action

    众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Ac ...

  3. Struts2理解--动态方法和method属性及通配符_默认Action

    众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Ac ...

  4. struts2 Action 接收参数的三种方法

    刚学Struts2 时 大家可能遇到过很多问题,这里我讲一下Action 接收参数的三种方法,我曾经在这上面摔过一回.所以要警醒一下自己..... 第一种:Action里声明属性,样例:account ...

  5. struts2 action 接受数组参数为Null的问题

    public List<FormulaDetail> formulaDetails; public List<FormulaDetail> getFormulaDetails( ...

  6. Struts2 | struts.xml文件中使用method属性和通配符简化action标签和Action处理类的编写

    转自:https://www.jianshu.com/p/310e89ee762d 在Struts2框架中,我们知道基本的Action标签只能实现一个url请求对应一个Action处理类.那么我们如果 ...

  7. Struts2 Action下面的Method调用方法

    1. 在struts.xml中加入<constant name="struts.enable.DynamicMethodInvocation" value="tru ...

  8. Spring MVC(五)--控制器通过注解@RequestParam接受参数

    上一篇中提到,当前后端命名规则不一致时,需要通过注解@RequestParam接受参数,这个注解是作用在参数上.下面通过实例说明,场景如下: 在页面输入两个参数,控制器通过注解接受,并将接受到的数据渲 ...

  9. Spring 中IOC(控制反转)&& 通过SET方式为属性注入值 && Spring表达式

    ### 1. Spring IoC IoC:Inversion of control:控制反转:在传统开发模式下,对象的创建过程和管理过程都是由开发者通过Java程序来实现的,操作权在开发者的Java ...

随机推荐

  1. CentOS配置java环境,mysql数据库等文章链接

    配置jdk 配置jdk 安装mysql8 yum install -y mysql-community-server 安装mysql8 安装redi 安装redis 安装docker 安装docker

  2. mysql——查询语句——单表查询——(概念)

    一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...

  3. 比反射更快!使用ASM获取class信息(ClassReader)

    比反射更快!使用ASM获取class信息(ClassReader) 通常我们想要在java运行时获取class的信息时,通常使用反射的方式来获取其中的属性,方法,注解等信息.通常是这样的: Class ...

  4. 使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别

    GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR |-angle 基于V ...

  5. 如何用纯 CSS 创作一个慧星拖尾效果的 loader 动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YLRLaM 可交互视频教 ...

  6. Jquery table相关--工时系统

    1.jquery 的弹出对话框,单击事件之后 if (confirm("确定要删除?")) { // //点击确定后操作 } 2.对某个table中的checkbox是否被选中的遍 ...

  7. 强大的开源企业级数据库监控利器Lepus

    Lepus监控简单介绍 官方网站:http://www.lepus.cc 开源企业级数据库监控系统 简洁.直观.强大的开源数据库监控系统,MySQL/Oracle/MongoDB/Redis一站式性能 ...

  8. golang利用beego框架orm操作mysql

    GO引入orm框架操作mysql 在beego框架中引入orm操作mysql需要进行的步骤: 第一步:导入orm框架依赖,导入mysql数据库的驱动依赖 import ( "github.c ...

  9. js鼠标点击特效,有关参数设置

    效果图,用的faststone--录像--togif,黄色圆圈实际是不显示的 博客后台管理设置 本地新建一个demo.html文件,可以自行测试,要引入jquery文件哦 来个“红橙黄绿蓝靛紫”的点击 ...

  10. Mysql命令行添加用户

    创建用户: 命令: ? 1 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username – 你将创建的用户名, host – ...