您的位置:首页 > 编程语言 > Java开发

struts学习(四)—属性封装、模型驱动封装和表达式封装

2017-03-09 19:03 666 查看
本文学习内容来自传智博客struts教程。

1.属性封装

作用:

直接把表单提交属性封装到action的属性里面

步骤:

(1)在action中声明成员变量,变量名称和表单输入项的名称一样

(2)生成变量的set方法。

缺点:

数据只是放在属性中,并没有放到对象中去。

(1)action类:

package data;

import com.opensymphony.xwork2.ActionSupport;

public class DataDemo1Action extends ActionSupport {

private String username;
private String password;
private String address;

public String execute() throws Exception {
System.out.println("username:"+username+"password:"+password+"address:"+address);
return NONE;
}

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;
}

}


(2)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="demo1" extends="struts-default" namespace="/">
<action name="book" class="action.BookAction">
<!-- chain: 转发 ,页面会发生改变,网址不发生改变,仍然为 http://127.0.0.1:8080/strutslearn2All/book -->
<result name="success" type="chain">orders</result>
</action>

<action name="orders" class="action.OrdersAction">
<result name="success">/HelloOrder.jsp</result>
</action>
</package>

<package name="demo2" extends="struts-default" namespace="/">
<action name="data1" class="data.DataDemo1Action"></action>
</package>

</struts>


(3)data1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/data1.action" method="post">
username:<input type="text" name="username"/>
<br/>
password:<input type="text" name="password"/>
<br/>
address:<input type="text" name="address"/>
<br/>
<input type="submit" value="submit"/>
</form>
</body>
</html>


2.模型驱动封装

作用:

使用模型驱动封装,可以直接把表单属性封装到实体类对象里面

实现步骤:

(1)action实现接口ModelDriven

(2)实现接口里面的getModel()方法

把创建对象返回

(3)在action里面创建实体类对象

要求:

表单输入项的name属性值和实体类属性名称一样。

(1)action类:

package data;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import entity.User;

public class DataDemo2Action extends ActionSupport implements ModelDriven<User> {

//创建对象
private User user = new User();

public String execute() throws Exception {

System.out.println(user);
return NONE;
}

@Override
public User getModel() {
return user;
}

}


(2)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="demo1" extends="struts-default" namespace="/">
<action name="book" class="action.BookAction">
<!-- chain: 转发 ,页面会发生改变,网址不发生改变,仍然为 http://127.0.0.1:8080/strutslearn2All/book -->
<result name="success" type="chain">orders</result>
</action>

<action name="orders" class="action.OrdersAction">
<result name="success">/HelloOrder.jsp</result>
</action>
</package>

<package name="demo2" extends="struts-default" namespace="/">
<action name="data2" class="data.DataDemo2Action"></action>
</package>
</struts>


(3)data2.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/data2.action" method="post">
username:<input type="text" name="username"/>
<br/>
password:<input type="text" name="password"/>
<br/>
address:<input type="text" name="address"/>
<br/>
<input type="submit" value="submit"/>
</form>
</body>
</html>


(4)实体类:

package entity;

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;
}
}


3.表达式封装

作用

使用表达式封装可以将表单数据封装到实体类里面

步骤

1.在action中声明实体类

2.生成实体类变量的set方法

3.在表单输入项的name属性值里面写表达式形式。

(1)action类

package data;

import com.opensymphony.xwork2.ActionSupport;

import entity.Book;
import entity.User;

public class DataDemo3Action extends ActionSupport {

private User user;
private Book book;

public Book getBook() {
return book;
}

public void setBook(Book book) {
this.book = book;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

@Override
public String execute() throws Exception {
System.out.println(user);
System.out.println(book);
return NONE;
}
}


(2)book实体类

package entity;

public class Book {

private String bookname;

public String getBookname() {
return bookname;
}

public void setBookname(String bookname) {
this.bookname = bookname;
}
}


(3)dat3.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/data3.action" method="post">
username:<input type="text" name="user.username" />
<br/>
password:<input type="text" name="user.password" />
<br/>
address:<input type="text" name="user.address" />
<br/>
bookname:<input type="text" name="book.bookname"/>
<br/>
<input type="submit" value="submit" />
</form>

</body>
</html>


(4)struts文件

<?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="demo1" extends="struts-default" namespace="/">
<action name="book" class="action.BookAction">
<!-- chain: 转发 ,页面会发生改变,网址不发生改变,仍然为 http://127.0.0.1:8080/strutslearn2All/book -->
<result name="success" type="chain">orders</result>
</action>

<action name="orders" class="action.OrdersAction">
<result name="success">/HelloOrder.jsp</result>
</action>
</package>

<package name="demo2" extends="struts-default" namespace="/">
<action name="data3" class="data.DataDemo3Action"></action>
</package>
</struts>


4.代码总体架构



4.使用以上封装要注意的问题

(1)同一个action中,不能同时使用属性封装和模型驱动封装获取同一个表单数据。如果同时使用,则框架只会使用模型驱动。

(2)模型驱动与表达式封装的不同:

1.使用模型驱动只能把数据封装到一个实体类对象里面。

在一个action里面不能把模型驱动封装到不同的实体类对象里面。

2.表达式封装可以把数据封装到不同的对象中去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐