一、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>