zoukankan      html  css  js  c++  java
  • [java]struts2 模型驱动 2016-05-01 21:40 702人阅读 评论(19) 收藏

       一开始敲网上商城的时候,对于数据的传递方式我是很惊艳了一把的,感觉特别高大上,就感觉,竟然不用像.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;
    	}
    	
    
    
    }
    


  • 相关阅读:
    CSS深入之第四天
    CSS之第三天总结
    第二天对CSS的学习
    开始走进CSS世界
    Hbuilder实用技巧
    项目总结
    CSS3的chapter6
    CSS3的chapter5
    CSS3的chapter4
    CSS3的chapter3
  • 原文地址:https://www.cnblogs.com/zhemeban/p/7183109.html
Copyright © 2011-2022 走看看