--------------------siwuxie095
模型驱动封装
1、模型驱动通过实体类进行数据传递,即 实体类充当了数据模型
「实体类封装的属性和表单的属性一一对应」
2、使用模型驱动封装,可以直接把表单数据封装到实体类对象中
3、具体步骤
(1)让 Action 实现 ModelDriven 接口
(2)在 Action 中创建实体类对象,即 数据模型对象
(3)重写接口的 getModel() 方法,返回数据模型对象
4、具体实现
(1)编写页面
data.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>表单</title> </head> <body> <form action="${pageContext.request.contextPath }/data.action" method="post"> username:<input type="text" name="username"/> <br/> password:<input type="password" name="password"/> <br/> address:<input type="text" name="address"/> <br/> <input type="submit" value="提交"/> </form> </body> </html> |
(2)编写实体类
User.java:
package com.siwuxie095.entity;
// User 实体类 public class User {
private String username; private String password; private String address; 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; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [username=" + username + ", password=" + password + ", address=" + address + "]"; } } |
(3)编写 Action
DataAction.java:
package com.siwuxie095.action;
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.siwuxie095.entity.User;
/** * 使用模型驱动封装获取表单数据 * * 实现 ModelDriven 接口,并指定泛型为实体类类型 */ public class DataAction extends ActionSupport implements ModelDriven<User>{ /* * 在 Action 中创建实体类对象,即数据模型对象 * * 注意:是创建,不是声明 */ private User user=new User(); /* * 重写接口的 getModel() 方法,返回数据模型对象 * * 即返回实体类对象 */ @Override public User getModel() { return user; }
@Override public String execute() throws Exception { System.out.println(user); return NONE; }
} |
(4)配置 Action
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="demo" extends="struts-default" namespace="/"> <action name="data" class="com.siwuxie095.action.DataAction"></action> </package>
</struts> |
(5)访问路径
http://localhost:8080/工程名/data.jsp
5、使用模型驱动封装和属性封装需要注意的问题
(1)在一个 Action 中获取表单数据,可以使用属性封装,也可以
使用模型驱动封装,但不能同时使用属性封装和模型驱动封装获取
同一个表单数据
(2)如果同时使用,之后会执行模型驱动封装,不会执行属性封装
6、模型驱动封装和表达式封装的异同
(1)同:都可以把数据封装到实体类对象中
(2)异:使用模型驱动封装只能把数据封装到一个实体类对象中,
而使用表达式封装可以把数据封装到多个实体类对象中
「前提:一个 Action 中」
【made by siwuxie095】