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 ...
随机推荐
- 解析之Nginx解析
- nginx一些高级配置
参数: https://www.wangbokun.com/%E8%BF%90%E7%BB%B4/2018/07/21/Nginx.html 免费证书等 1/ nginx代理hue限制上传文件大小 ...
- 21天学通Python课后实验题4.6
21天学通Python课后实验题4.6 1. 编程实现用户输入一门课程的两门子课程成绩,第一门子课程60分以上,则显示“通过”,第一门子课程不及格,则显示“未通过”,第一门子课程及格,而第二门子课程不 ...
- 使用CompletableFuture进行异步任务编排
1.JDK5引入了Future进行异步任务的处理,Future 的接口主要方法有以下几个: (1)boolean cancel (boolean mayInterruptIfRunning) 取消任务 ...
- 课程计划安排 ver: 2016-12-14
录的越多,后续肯定会涨价. <x86 从实模式到保护模式> 这本书涉及到除了汇编语言,还有一些计算机架构和操作系统方面相关的知识点. 不仅为学习高级编程语言打下了非常扎实的基础,学完C++ ...
- PHP中的data()函数
date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考. 格式化日期date() 函数的第一个参数规定了如何格式化日期/时间.它使用字母 ...
- java暂停线程
暂停线程 本节介绍两个被废弃的用于线程暂停和恢复的方法suspend().resume().主要探究废弃原因,强调线程的安全性.主要有两个原因 原因1: suspend().resume()使用不当, ...
- HDU-5238 Calculator
题目描述 给定一个关于 \(x\) 的表达式,形如下例:\(×4+2^3+8×6\) 按如下方法计算:\((((x×4)+2)^3+8)×6\) 运算符只有 加号,乘号,幂运算三种,给定的式子中有 \ ...
- js执行多次事件,而非一次
晚上查阅了很多文章,都是避免点击事件多次执行.反过来要是让事件多次执行该如何做? 这里可以配个setTimeout():来执行 这里我们用layui <link rel="styles ...
- cookie,session,token的理解
Get POST 区别异同点 淘宝token的 理解 过程算法 防止伪造请求 伪造相对难 简单发展史 登录的操作: 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分开,这就是一个 ...