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


  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/zhemeban/p/7183109.html
Copyright © 2011-2022 走看看