struts学习(四)—属性封装、模型驱动封装和表达式封装
2017-03-09 19:03
666 查看
本文学习内容来自传智博客struts教程。
直接把表单提交属性封装到action的属性里面
步骤:
(1)在action中声明成员变量,变量名称和表单输入项的名称一样
(2)生成变量的set方法。
缺点:
数据只是放在属性中,并没有放到对象中去。
使用模型驱动封装,可以直接把表单属性封装到实体类对象里面
实现步骤:
(1)action实现接口ModelDriven
(2)实现接口里面的getModel()方法
把创建对象返回
(3)在action里面创建实体类对象
要求:
表单输入项的name属性值和实体类属性名称一样。
使用表达式封装可以将表单数据封装到实体类里面
步骤
1.在action中声明实体类
2.生成实体类变量的set方法
3.在表单输入项的name属性值里面写表达式形式。
(2)模型驱动与表达式封装的不同:
1.使用模型驱动只能把数据封装到一个实体类对象里面。
在一个action里面不能把模型驱动封装到不同的实体类对象里面。
2.表达式封装可以把数据封装到不同的对象中去。
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.表达式封装可以把数据封装到不同的对象中去。
相关文章推荐
- ###struts模型驱动(必须new)能够封装【对象类型属性的属性】.页面传参错误导致的问题:HTTP Status 500 - could not execute statement;
- JavaWeb获取表单数据的三种方式(属性封装,表达式封装,模型驱动封装)
- Struts学习之模型驱动
- Struts2学习笔记三(异常处理、模型驱动和属性驱动、servlet接口、Preparable接口)
- struts2_day02_09-属性封装操作_10-模型驱动封装操作_11-使用属性封装和模型驱动封装注意问题
- JAVA -- Struts模型驱动和属性驱动
- Struts2属性驱动封装(了),需要使用ognl表达式
- Struts中模型驱动与属性驱动共同使用可能会遇到的问题
- struts2_day02_12-表达式封装_13-比较表达式封装和模型驱动封装
- struts2学习笔记-模型驱动和属性驱动
- Struts属性驱动与模型驱动的区别
- struts同时使用属性注入和模型驱动注入数据注入失败原因分析及解决方法
- Struts-setter、getter方法自动 ActionSupport类-属性驱动+模型驱动
- struts模型驱动和属性驱动冲突的问题
- struts属性驱动与模型驱动
- struts模型驱动和属性驱动
- 第31天(就业班) struts数据校验、UI标签、ognl表达式语法、数据回显、模型驱动
- struts2 接受参数的两种方式(属性驱动和模型驱动)
- 浅谈Struts2的模型驱动(ModelDrivenInterceptor)和属性封装和struts2数据封装机制
- Strus2 页面传输数据到后台(普通属性传值,模型驱动传值,域对象传值,OGNL表达式传值)