属性驱动封装

来源:互联网 发布:js 获取input的value 编辑:程序博客网 时间:2024/06/13 22:58

-------------------siwuxie095

  

  

  

  

  

  

  

属性驱动封装

  

  

1、Struts2 将数据封装分为两大类:

  

1)一类被称为是属性驱动

  

2)一类被称为是模型驱动

  

  

  

2、属性驱动封装可以细分成两种:

  

1)一种只需要提供属性的set方法即可(简称 属性封装

  

2)一种可以通过表达式直接封装到对象中(简称表达式封装

  

  

  

  

  

  

  

(一)属性封装:提供属性的set 方法

  

  

1、在Struts2 中可以直接在 Action 中定义各种 Java 基本数据

类型的字段,使这些字段和表单数据相对应,并利用这些字段进

数据传递

  

「直接把表单数据封装到Action 的属性中」

  

  

  

2、具体步骤

  

1)在 Action 的成员变量位置定义属性

  

2)提供属性的 set 方法

  

「属性名称要和表单输入项的name 属性值一致」

  

  

  

3、具体实现

  

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>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>表单</title>

</head>

<body>

<formaction="${pageContext.request.contextPath }/data.action"method="post">

username:<inputtype="text"name="username"/>

<br/>

password:<inputtype="password"name="password"/>

<br/>

address:<inputtype="text"name="address"/>

<br/>

<inputtype="submit"value="提交"/>

</form>

</body>

</html>

  

  

  

2)编写Action

  

DataAction.java:

  

package com.siwuxie095.action;

  

import com.opensymphony.xwork2.ActionSupport;

  

  

/**

*使用属性封装获取表单数据

*/

public class DataActionextends ActionSupport {

 

/*

* (1) Action的成员变量位置定义属性

*

*属性名称要和表单输入项的 name属性值一致

*/

private String username;

private String password;

private String address;

 

 

/*

* (2)提供属性的 set方法

*

*其实只需要提供 set方法即可,因为

*是自动生成,所以顺便生成 get方法

*/

public String getUsername() {

return username;

}

 

publicvoid setUsername(String username) {

this.username = username;

}

  

public String getPassword() {

return password;

}

  

publicvoid setPassword(String password) {

this.password = password;

}

  

public String getAddress() {

return address;

}

  

publicvoid setAddress(String address) {

this.address = address;

}

  

  

@Override

public String execute()throws Exception {

System.out.println(username+"-"+password+"-"+address);

return NONE;

}

}

  

  

  

3)配置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>

  

  

  

4)访问路径

  

http://localhost:8080/工程名/data.jsp

  

  

  

4、问题与缺陷

  

如果要表单数据很多,那么Action 的属性也会变得很多,再加上

属性有对应的getter 和 setter 方法,从而导致 Action 的代码很

庞大,再在Action 中编写业务逻辑的代码时,会使 Action 非常

臃肿,不够简洁

  

「表单数据只是封装到属性中,并没有封装到对象中」

  

  

  

5、解决方案

  

把属性和对应的getter 和 setter 方法从 Action 中提取出来,封

装到实体类中,单独作为一个值对象

  

该对象就是用来封装表单数据的,且可以在多个Action 中使用

  

「实体类封装的属性和表单的属性一一对应」

  

  

  

  

  

  

  

(二)表达式封装:页面提供 OGNL表达式

  

  

1、表达式封装可以把表单数据直接封装到实体类对象

  

  

  

2、具体步骤

  

1)在 Action 中声明实体类对象

  

2)提供实体类对象的 get 和 set 方法

  

3)在表单输入项的name 属性值处写OGNL 表达式

  

  

  

3、具体实现

  

1)编写实体类

  

User.java:

  

package com.siwuxie095.entity;

  

  

// User实体类

public class User {

  

private String username;

private String password;

private String address;

 

public String getUsername() {

return username;

}

publicvoid setUsername(String username) {

this.username = username;

}

 

public String getPassword() {

return password;

}

publicvoid setPassword(String password) {

this.password = password;

}

 

public String getAddress() {

return address;

}

publicvoid setAddress(String address) {

this.address = address;

}

 

@Override

public String toString() {

return"User [username=" + username +", password=" + password

+", address=" + address + "]";

}

 

}

  

  

  

2)编写Action

  

DataxAction.java:

  

package com.siwuxie095.action;

  

import com.opensymphony.xwork2.ActionSupport;

import com.siwuxie095.entity.User;

  

/**

*使用表达式封装获取表单数据

*/

public class DataxActionextends ActionSupport {

  

/*

* (1) Action中声明实体类对象

*

*注意:是声明,不是创建,即不需要 new

*/

private User user;

 

/*

* (2)提供实体类对象的 get set方法

*/

public User getUser() {

return user;

}

  

publicvoid setUser(User user) {

this.user = user;

}

  

 

@Override

public String execute()throws Exception {

System.out.println(user);

return NONE;

}

 

}

  

  

  

3)配置Action

  

struts.xml:

  

<?xmlversion="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>

 

<packagename="demo"extends="struts-default"namespace="/">

 

<actionname="datax"class="com.siwuxie095.action.DataxAction"></action>

 

</package>

  

</struts>

  

  

  

4)编写页面

  

datax.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>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>表单</title>

</head>

<body>

<!--

(3)在表单输入项的 name属性值处写 OGNL表达式

 

user.username user,即 Action 中声明的实体类对象

-->

<formaction="${pageContext.request.contextPath }/datax.action"method="post">

username:<inputtype="text"name="user.username"/>

<br/>

password:<inputtype="password"name="user.password"/>

<br/>

address:<inputtype="text"name="user.address"/>

<br/>

<inputtype="submit"value="提交"/>

</form>

</body>

</html>

  

  

  

5)访问路径

  

http://localhost:8080/工程名/datax.jsp

  

  

  

  

  

  

  

  

【made by siwuxie095】

原创粉丝点击