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 ...
随机推荐
- 【CUDA开发】Thrust库
Thrust库从C++的STL中得到灵感,将最简单的类似于STL的结构放在Thrust库中,比如STL中的vector.此外,Thrust库还包含STL中的算法和迭代器. Thrust函 ...
- CTR点击率校准
1. 概述 广告CTR预估过程中,正负样本比例差距较大,需要采样,但是采用后模型训练的结果是有偏的. 2. 校准方式 用逻辑回归作为激活函数
- 一篇文章搞懂python2、3编码
说在前边: 编码问题一直困扰着每一个程序员的编程之路,如果不将它彻底搞清楚,那么你的的这条路一定会走的格外艰辛,尤其是针对使用python的程序员来说,这一问题更加显著, 因为python有两个版本, ...
- SQL语句规范
SQLStructure Query Language,结构化查询语言 1.规范(1)mysql对于SQL语句不区分大小写,SQL语句关键字尽量大写 show databases;show DataB ...
- luoguP1886 滑动窗口(单调队列模板题)
题目链接:https://www.luogu.org/problem/P1886#submit 题意:给定n个数,求大小为k的滑动窗口中最小值和最大值. 思路:单调队列模板题. AC代码: #incl ...
- yum源配置、epel源配置
关键词:yum源,本地yum源,网络yum源 [1]配置本地yum源 1.挂载好光盘到/redhat/mnt/mnt下 mount /dev/cdrom /mnt 2.操作 cd /etc/yum ...
- ZooKeeper的ACL权限
ACL控制权限 什么是ACL(Access Control List访问控制列表) 针对节点可以设置相关读写等权限, 目的为了保障数据安全性 权限permission可以指定不同的权限范围以及角色 A ...
- java中的全局变量、局部变量与静态常量的区别
java中的变量类型分类: 类变量:独立于方法之外的变量,用 static 修饰.实例变量:独立于方法之外的变量,不过没有 static 修饰.局部变量:类的方法中的变量.比如: public cla ...
- LLVM4.0与3.5编译phase对比
说是LLVM4.0和3.5的对比,其实是Clang的4和3.5的对比.在调试Clang编译源码的过程中,发现-S选项在4.0和3.5中的处理不一样,后来使用命令验证了这个事情 jourluohua@j ...
- 多线程的些许理解(平台x86,具体考虑linux,windows)
多线程的些许理解 一.体系架构 1.原子操作 1) 定义 不可中断的一个或者一系列操作,也就是不会被线程调度机制打断的操作,在运行期间不会有任何的上下文切换(context switch). 2) 我 ...