Struts2(三)参数传递
package cn.bdqn.bean;
/**
*
*用户的实体类
*/
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String name, String password) {
super();
this.name = name;
this.password = password;
}
public User() {
super();
}
}
一:前台传递单个属性
01.创建登录界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="user/login" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="登录"/></td>
</tr>
</table>
</form>
</body>
</html>
02.在struts.xml中配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/user" extends="struts-default">
<!--用户登录的action -->
<action name="login" class="cn.bdqn.action.LoginAction">
<!--如果返回值是success,则可以省略name属性 -->
<result name="success">/loginSuccess.jsp</result>
</action>
</package>
</struts>
03.创建对应的Action
package cn.bdqn.action;
import cn.bdqn.bean.User;
import com.opensymphony.xwork2.ActionSupport;
/**
*
* 用户登录的action
*/
public class LoginAction extends ActionSupport {
/**
* 01.定义和表单中name属性值一致的成员变量,并且具有get和set
*/
private String name;
private String password;
@Override
public String execute() throws Exception {
System.out.println("用户名:"+name);
System.out.println("密码:"+password);
return "success"; //"success" SUCCESS super.execute()
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
04.创建登录成功 页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'success.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
=============== 通过el表达式获取后台的数据 默认的作用是 request===============<br/>
${requestScope.name} <br/>
${password}<br/>
=============== 通过struts2的标签获取===============<br/>
<s:property value="name"/><br/>
<s:property value="password"/><br/>
<s:debug/>
</body>
</html>
二:前台传递对象
修改login.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="user/login" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="user.name"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="user.password"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="登录"/></td>
</tr>
</table>
</form>
</body>
</html>
02.struts.xml文件中的代码不需要改变
03.修改LoginAction中的代码
package cn.bdqn.action;
import cn.bdqn.bean.User;
import com.opensymphony.xwork2.ActionSupport;
/**
*
* 用户登录的action
*/
public class LoginAction extends ActionSupport {
/**
* 02.直接定义前台表单中的对象!并且具有get和set! 这是我们常使用的方式
*/
private User user;
@Override
public String execute() throws Exception {
System.out.println("用户名:"+user.getName());
System.out.println("密码:"+user.getPassword());
return "success"; //"success" SUCCESS super.execute()
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
04.修改loginSuccess.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'success.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
=============== 通过el表达式获取后台的数据 默认的作用是 request===============<br/>
${requestScope.user.name} <br/>
${user.password}<br/>
=============== 通过struts2的标签获取===============<br/>
<s:property value="user.name"/><br/>
<s:property value="user.password"/><br/>
<s:debug/>
</body>
</html>
三:实现ModelDriven接口
其他代码和单个属性传递 一致!
只需要更改LoginAction中的代码即可!
package cn.bdqn.action;
import cn.bdqn.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 用户登录的action
*/
public class LoginAction extends ActionSupport implements ModelDriven {
/**
* 03.实现ModelDriven 前台的name属性值 必须要和user对象中的属性名一致!不需要user.
*/
private User user=new User();
@Override
public String execute() throws Exception {
System.out.println("用户名:"+user.getName());
System.out.println("密码:"+user.getPassword());
return "success"; //"success" SUCCESS super.execute()
}
@Override
public Object getModel() {
return user;
}
}
Struts.xml文件中一些常量的设置以及验证默认转发
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- struts2的默认扩展名
struts.action.extension=action,,
01.以action结尾 02.什么都不写
<constant name="struts.action.extension" value="do,t10"/>
### - struts.i18n.reload = true
### - struts.configuration.xml.reload = true
struts.devMode = false //手动重启
01.开发模式: 修改代码多 struts.devMode =true 自动重启
02.生产模式: 项目发布 struts.devMode = false 手动重启
-->
<constant name="struts.devMode" value="true"/><!-- 设置开发模式 -->
<package name="default" namespace="/user" extends="struts-default">
<!--用户登录的action -->
<action name="login" class="cn.bdqn.action.LoginAction">
<!--如果返回值是success,则可以省略name属性
type:的默认值 是转发!
怎么验证转发?
看浏览器中的url是不是action的属性值!是!就是转发!
如果是 loginSuccess.jsp说明是重定向!
type="redirect":重定向!
-->
<result name="success">/loginSuccess.jsp</result>
</action>
</package>
</struts>