struts2 中的两种传值方式:
1.属性驱动传值
2.模型驱动传值
模型驱动传值(小小例子):
在struts2模型驱动可以封装用户请求的参数, 还可以封装Action 的处理结果
<body>
<div class="newsmain">
<div class="register">
<form action="register.action" method="post" name="form">
<label>用户名:</label><input type="text" id="username" name="username"/><span id="userMsg">${model.username}</span><br/>
<label>密码:</label><input type="password" id="password1" name="password1"/><span id="pwdMsg1">${model.password}</span><br/>
<input type="submit" value="登录"/>
</form>
</div>
</div>
</body>
在这里将LoginAction 分为了两部分 UserDTO 属性 和 LoginAction 执行(struts2 这建议使用合在一起写,它说可以减少一个类。但是,为了方便理解合适分开写)
UserDTO 封装了页面的属性值
package com.yinhe.modeldriven;
public class UserDTO {
private String username;
private String password1;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword1() {
return password1;
}
public void setPassword1(String password1) {
this.password1 = password1;
}
}
LoginAction类
package com.yinhe.services.useraction;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.yinhe.dao.UserDao;
import com.yinhe.jdbc.JDBC; //数据库的连接为写
import com.yinhe.modeldriven.UserDTO;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport implements ModelDriven<UserDTO>{ //实现 ModelDriven 接口 ,该接口实现getModel()方法
private UserDTO userm = new UserDTO();
public String execute() throws Exception {
UserDao ud = new UserDao();
if(ud.addUser(new JDBC().getConn(), this.getModel())){
return SUCCESS;
}
return ERROR;
}
public UserDTO getModel() {
return this.userm; //让页面通过标签取值
}
}
//要使用的方法
package com.yinhe.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.yinhe.modeldriven.UserDTO;
public class UserDao {
private PreparedStatement pstm;
private ResultSet rs;
private boolean falg = false;
/**
* 添加用户信息的方法
* @param conn 得到Connection 连接
* @param ls 用户的属性(UserDTO)
* @return falg: true--添加用户成功; false--添加用户失败
*/
public boolean addUser(Connection conn, UserDTO ls){
String sql = "insert into tb_user(useruname,userpwd) values(?,?)";
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1, ls.getUsername());
pstm.setString(2, ls.getPassword1());
int i = pstm.executeUpdate();
if(i > 0){
falg = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return falg;
}
}
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="str2register" extends="struts-default" namespace="/">
<action name="register" class="com.yinhe.services.useraction.LoginAction">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
二: 将属性和执行都放在同一个java类中
package com.yinhe.services.useraction;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.yinhe.dao.UserDao;
import com.yinhe.jdbc.JDBC; //数据库的连接为写
import com.yinhe.modeldriven.UserDTO;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport{ //实现 ModelDriven 接口 ,该接口实现getModel()方法
private String username;
private String password1;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword1() {
return password1;
}
public void setPassword1(String password1) {
this.password1 = password1;
}
public String execute() throws Exception {
UserDao ud = new UserDao();
if(ud.addUser(new JDBC().getConn(), this)){ //将自己传进去
return SUCCESS;
}
return ERROR;
}
}
//要使用的方法
package com.yinhe.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.yinhe.modeldriven.UserDTO;
public class UserDao {
private PreparedStatement pstm;
private ResultSet rs;
private boolean falg = false;
/**
* 添加用户信息的方法
* @param conn 得到Connection 连接
* @param ls 用户的属性(UserDTO)
* @return falg: true--添加用户成功; false--添加用户失败
*/
public boolean addUser(Connection conn, ActionSupport as){
String sql = "insert into tb_user(useruname,userpwd) values(?,?)";
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1, ls.getUsername());
pstm.setString(2, ls.getPassword1());
int i = pstm.executeUpdate();
if(i > 0){
falg = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return falg;
}
}
struts.xml 中的配置不变
1.属性驱动传值
2.模型驱动传值
模型驱动传值(小小例子):
在struts2模型驱动可以封装用户请求的参数, 还可以封装Action 的处理结果
<body>
<div class="newsmain">
<div class="register">
<form action="register.action" method="post" name="form">
<label>用户名:</label><input type="text" id="username" name="username"/><span id="userMsg">${model.username}</span><br/>
<label>密码:</label><input type="password" id="password1" name="password1"/><span id="pwdMsg1">${model.password}</span><br/>
<input type="submit" value="登录"/>
</form>
</div>
</div>
</body>
在这里将LoginAction 分为了两部分 UserDTO 属性 和 LoginAction 执行(struts2 这建议使用合在一起写,它说可以减少一个类。但是,为了方便理解合适分开写)
UserDTO 封装了页面的属性值
package com.yinhe.modeldriven;
public class UserDTO {
private String username;
private String password1;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword1() {
return password1;
}
public void setPassword1(String password1) {
this.password1 = password1;
}
}
LoginAction类
package com.yinhe.services.useraction;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.yinhe.dao.UserDao;
import com.yinhe.jdbc.JDBC; //数据库的连接为写
import com.yinhe.modeldriven.UserDTO;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport implements ModelDriven<UserDTO>{ //实现 ModelDriven 接口 ,该接口实现getModel()方法
private UserDTO userm = new UserDTO();
public String execute() throws Exception {
UserDao ud = new UserDao();
if(ud.addUser(new JDBC().getConn(), this.getModel())){
return SUCCESS;
}
return ERROR;
}
public UserDTO getModel() {
return this.userm; //让页面通过标签取值
}
}
//要使用的方法
package com.yinhe.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.yinhe.modeldriven.UserDTO;
public class UserDao {
private PreparedStatement pstm;
private ResultSet rs;
private boolean falg = false;
/**
* 添加用户信息的方法
* @param conn 得到Connection 连接
* @param ls 用户的属性(UserDTO)
* @return falg: true--添加用户成功; false--添加用户失败
*/
public boolean addUser(Connection conn, UserDTO ls){
String sql = "insert into tb_user(useruname,userpwd) values(?,?)";
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1, ls.getUsername());
pstm.setString(2, ls.getPassword1());
int i = pstm.executeUpdate();
if(i > 0){
falg = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return falg;
}
}
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="str2register" extends="struts-default" namespace="/">
<action name="register" class="com.yinhe.services.useraction.LoginAction">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
二: 将属性和执行都放在同一个java类中
package com.yinhe.services.useraction;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.yinhe.dao.UserDao;
import com.yinhe.jdbc.JDBC; //数据库的连接为写
import com.yinhe.modeldriven.UserDTO;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport{ //实现 ModelDriven 接口 ,该接口实现getModel()方法
private String username;
private String password1;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword1() {
return password1;
}
public void setPassword1(String password1) {
this.password1 = password1;
}
public String execute() throws Exception {
UserDao ud = new UserDao();
if(ud.addUser(new JDBC().getConn(), this)){ //将自己传进去
return SUCCESS;
}
return ERROR;
}
}
//要使用的方法
package com.yinhe.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.yinhe.modeldriven.UserDTO;
public class UserDao {
private PreparedStatement pstm;
private ResultSet rs;
private boolean falg = false;
/**
* 添加用户信息的方法
* @param conn 得到Connection 连接
* @param ls 用户的属性(UserDTO)
* @return falg: true--添加用户成功; false--添加用户失败
*/
public boolean addUser(Connection conn, ActionSupport as){
String sql = "insert into tb_user(useruname,userpwd) values(?,?)";
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1, ls.getUsername());
pstm.setString(2, ls.getPassword1());
int i = pstm.executeUpdate();
if(i > 0){
falg = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return falg;
}
}
struts.xml 中的配置不变