1. 程式人生 > >[java]struts2 模型驅動

[java]struts2 模型驅動

   一開始敲網上商城的時候,對於資料的傳遞方式我是很驚豔了一把的,感覺特別高大上,就感覺,竟然不用像.net一樣取誰的值,給誰賦值這樣,只要需要用的時候,簡單的get一下就ok了,簡直高大上啊。

   然後發現,這是struts2的模型驅動,下面,就來和我一起學習一下struts2吧。

   何為struts2?

   Apache Struts 2是一個用於開發Java EE網路應用程式的開源Web應用框架。它利用並擴充套件了Java Servlet API,鼓勵開發者採用MVC架構。

   Struts2的優點

     POJO表單和POJO動作 - Struts2的Struts框架已經擺脫了動作表單組成部分, Struts2可以使用任何POJO接收的形式輸入。同樣現在可以看到任何POJO作為一個Action類。


標籤支援 - Struts2中,提高了表單標籤和新標籤允許開發人員編寫更少的程式碼。


AJAX 支援- Struts2中已確認由Web2.0技術接管,並整合到產品中,通過建立AJAX標籤,功能非常相似的標準Struts2 標籤AJAX支援。


易於整合 - Struts2 整合各種整合與其他框架如Spring,Tiles 和SiteMesh是現在更容易。


模板支援 - 支援生成使用模板。


外掛支援 - 可以提高核心Struts2的特性,並增強使用外掛。大量的外掛可供Struts2。


效能分析 - Struts2的分析,除錯和分析應用程式提供了整合。除此之外,Struts還提供了整合的內建除錯工具除錯。


易於修改標籤 - Struts2的標籤標註,可以調整使用Freemarker的模板。這並不需要JSP或Java知識。基本HTML,XML和CSS知識是足夠修改標籤。


提倡少配置 - Struts2 促進較少的配置的幫助下,使用預設的各種設定值。不必配置的東西,除非它不符

Struts2的預設設定。


檢視技術: - Struts2中有一個很大的支援多個檢視選項 (JSP, Freemarker, Velocity 和 XSLT)


以上只是Struts2的十大功能,這使得它是企業公司級應用框架。

   什麼是模型驅動?

   struts2與struts很大的不同點在於,struts的execute方法提供了HttpServletRequest和HttpServletResponse方法在獲取客戶端提交的資料資訊的時候需要使用HttpServletRequest的getParameter()方法,並且還需要進行必要的資料型別轉換。如何客戶端提交的資料量大的時候,我們則需要寫很多的getParameter方法。這樣程式碼量就相應的增加不少。但是struts2為我們提供了屬性驅動和模型驅動,它不需要我們寫很多的獲取值的方法。而只需要我們在Action中定義相應的getter方法,在介面上以Action中的變數名作為表單元素的name屬性值即可。

   屬性驅動和模型驅動的異同?

1.屬性驅動


對於屬性驅動,我們需要在Action中定義與表單元素對應的所有的屬性,因而在Action中會出現很多的getter和setter方法

2.模型驅動


對於模型驅動,使用的Action物件需要實現ModelDriven介面並給定所需要的型別.而在Action中我們只需要定義一個封裝所有資料資訊的javabean

3.屬性和模型驅動的相同點


當我們使用屬性驅動和模型驅動的時候,必須將表單的元素中的name屬性值與我們定義接收資料資訊的變數名對應起來。

    驅動模型的使用

    在使用方面,驅動模型就是將所有的屬性都封裝在javabean裡面,然後Action除了繼承ActionSupport還要實現ModelDriven介面,該介面定義了一個getModel()方法,返回經過賦值的模型例項。

    例項:

    Order.java

package cn.itcast.shop.order.vo;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import cn.itcast.shop.user.vo.User;

/**
 * 訂單模組的實體類
 * @author glntg
 *
 */
public class Order {
	private Integer oid;
	private Double total;
	private Date ordertime;
	private Integer state;
	private String name;
	private String addr;
	public Integer getOid() {
		return oid;
	}
	public void setOid(Integer oid) {
		this.oid = oid;
	}
	public Double getTotal() {
		return total;
	}
	public void setTotal(Double total) {
		this.total = total;
	}
	public Date getOrdertime() {
		return ordertime;
	}
	public void setOrdertime(Date ordertime) {
		this.ordertime = ordertime;
	}
	public Integer getState() {
		return state;
	}
	public void setState(Integer state) {
		this.state = state;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public Set<OrderItem> getOrderItems() {
		return orderItems;
	}
	public void setOrderItems(Set<OrderItem> orderItems) {
		this.orderItems = orderItems;
	}
	private String phone;
	//訂單所屬的使用者
	private User user;
	//訂單中所屬的多個訂單項
	private Set<OrderItem> orderItems=new HashSet<OrderItem>();
}

   OrderAction.java

package cn.itcast.shop.order.action;

import java.text.SimpleDateFormat;
import java.util.Date;
import cn.itcast.shop.order.vo.Order;

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


/**
 * 訂單管理Action
 * @author glntg
 *
 */
public class OrderAction extends ActionSupport implements ModelDriven<Order>{

	//模型驅動使用的物件
	private Order order=new Order();
	//注入OrderServiec
	private OrderService orderService;
	
	public void setOrderService(OrderService orderService) {
		this.orderService = orderService;
	}

	public Order getModel() {
		return order;
	}
	


}