Struts2-Action接受参数方式、method属性使用及通配符的配置
一、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属性使用及通配符的配置的更多相关文章
- 【代码总结】Struts2 Action接受参数方式的对比
一.属性方式 1.Action中:对应表单参数的setter.getter 2.页面中 :Form中元素name取值属性名 <s:property value="属性名" ...
- [转]Struts2理解--动态方法和method属性及通配符_默认Action
众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Ac ...
- Struts2理解--动态方法和method属性及通配符_默认Action
众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Ac ...
- struts2 Action 接收参数的三种方法
刚学Struts2 时 大家可能遇到过很多问题,这里我讲一下Action 接收参数的三种方法,我曾经在这上面摔过一回.所以要警醒一下自己..... 第一种:Action里声明属性,样例:account ...
- struts2 action 接受数组参数为Null的问题
public List<FormulaDetail> formulaDetails; public List<FormulaDetail> getFormulaDetails( ...
- Struts2 | struts.xml文件中使用method属性和通配符简化action标签和Action处理类的编写
转自:https://www.jianshu.com/p/310e89ee762d 在Struts2框架中,我们知道基本的Action标签只能实现一个url请求对应一个Action处理类.那么我们如果 ...
- Struts2 Action下面的Method调用方法
1. 在struts.xml中加入<constant name="struts.enable.DynamicMethodInvocation" value="tru ...
- Spring MVC(五)--控制器通过注解@RequestParam接受参数
上一篇中提到,当前后端命名规则不一致时,需要通过注解@RequestParam接受参数,这个注解是作用在参数上.下面通过实例说明,场景如下: 在页面输入两个参数,控制器通过注解接受,并将接受到的数据渲 ...
- Spring 中IOC(控制反转)&& 通过SET方式为属性注入值 && Spring表达式
### 1. Spring IoC IoC:Inversion of control:控制反转:在传统开发模式下,对象的创建过程和管理过程都是由开发者通过Java程序来实现的,操作权在开发者的Java ...
随机推荐
- Springboot 上传报错: Failed to parse multipart servlet request; nested exception is java.lang.IllegalStateException: The multi-part request contained parameter data (excluding uploaded files) that exceede
Failed to parse multipart servlet request; nested exception is java.lang.IllegalStateException: The ...
- 【图像-视频处理】YUV420、YV12与RGB24的转换公式
bool YV12ToBGR24_Native(unsigned char* pYUV,unsigned char* pBGR24,int width,int height) { if (width ...
- 2016年蓝桥杯省赛C++A组 消除尾一
消除尾一: 下面的代码把一个整数的二进制表示的最右边的连续的1全部变成0如果最后一位是0,则原数字保持不变. 如果采用代码中的测试数据,应该输出: 00000000000000000000000001 ...
- CSP 最大的矩形(201312-3)
问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方图.例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3 ...
- c语言:<tchar.h>
头文件“<tchar.h>”作用就是为了进行ASCII码和UNICODE(wide-character)码的头文件(该头文件由微软提供): 这样我们就可以使用TCHAR.H头文件中的定义的 ...
- linux常见的安装软件包命令
常用的 RPM 软件包命令 安装软件的命令格式 rpm -ivh filename.rpm 升级软件的命令格式 rpm -Uvh filename.rpm 卸载软件的命令格式 rpm -e filen ...
- CentOS 7 安装ActiveMQ
今天给大家介绍一下 CentOS 7 下如何安装ActiveMQ,每个步骤均为亲自己操作后记录.下面我们开始吧. 1.首先进入自己的目录下面,创建并进入 activeMQ 文件夹(mkdir acti ...
- C语言经典100例(1-50)
[程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列. main ...
- MySQL数据库基础-JAVA
数据库 MySQL初步 MySQL基础认知 (Oracle真的是走哪祸害到哪23333) Java多用MySQL和Oracle SQLServer也收费,但是还行,比Oracle便宜,一个差不多3w多 ...
- leetcode 1266. Minimum Time Visiting All Points
On a plane there are n points with integer coordinates points[i] = [xi, yi]. Your task is to find th ...