Struts2-属性驱动与模型驱动

 

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属性值与我们定义接收数据信息的变量

 名对应起来。

 

 

三、如何使用属性驱动?

:对于属性驱动的实现是非常简单的 ,实例如下:

action:

	package org.viancent.action;
        import java.util.Date;
	import com.opensymphony.xwork2.ActionSupport;

	public class GetFieldAction extends ActionSupport {
			private String pname;
			private String address;
			private int age;
			private Date date;

			public String getPname() {
				return pname;
			}

			public void setPname(String pname) {
				this.pname = pname;
			}

			public String getAddress() {
				return address;
			}
				
	                public void setAddress(String address) {
				this.address = address;
			}

			public int getAge() {
				return age;
			}

			public void setAge(int age) {
				this.age = age;
			}

			public Date getDate() {
				return date;
			}

			public void setDate(Date date) {
				this.date = date;
			}
					
			@Override
			public String execute() throws Exception {
				return SUCCESS;
	                  }
}

 

JSP:(register.jsp)
	<div>
	<form action="/struts2/register.action" method="post">
		<table width="80%" align="center">
	<tr>
		<td>UserName:</td>
		<td><input type="text" name="pname" id="pname"/>       </td>
	</tr>
	<tr>
		<td>PassWord:</td>
		<td><input type="text" name="address" id="address"/></td>
	</tr>
	<tr>
		<td>Age:</td>
		<td><input type="text" name="age" id="age"/></td>
	</tr>
	<tr>
		<td>Date</td>
		<td><input type="text" name="date" id="date"/></td>
	</tr>
	<tr>
		<td colspan="2"><input type="submit" value="submit"/></td>
	</tr>
	</table>
</form>
</div>
			
//其他配置信息,相同

  四、模型驱动

:模型驱动有三点不同

1.所属的Action需要实现ModelDriven接口,并且给定类型和实现接口中的getModel方法

2.需要一个封装所有属性的javabean(对应 1.中的给给定类型)

3.在struts.xml文件中描述此Action的地方让该Action实现一个拦截器 (ModelDrivenInterceptor)

:具体实例如下:

	JavaBean(person)
	package org.viancent.domain;
	import java.util.Date;
	public class Person {
			private String pname;
			private int page;
			private String address;
			private Date date;

		public Date getDate() {
				return date;
		}

		public void setDate(Date date) {
				this.date = date;
		}

		public String getPname() {
				return pname;
		}

		public void setPname(String pname) {
				this.pname = pname;
		}

		public int getPage() {
				return page;
		}

		public void setPage(int page) {
				this.page = page;
		}

		public String getAddress() {
				return address;
		}

		public void setAddress(String address) {
				this.address = address;
		}
	}

 

Action:(RegisterAction)

	package org.viancent.action;
	import org.viancent.domain.Person;
	import com.opensymphony.xwork2.ActionSupport;
	import com.opensymphony.xwork2.ModelDriven;

	public class RegisterAction extends ActionSupport implements
	ModelDriven<Person/*这里需要填写Person对象*/> {
					
		private Person person =  new Person(); 
               //定义Person对象用于承载getModel()方法返回的数据信息
	       //同时这里必须实例化对象,否则person的对象会为空
					
		public Person getPerson() { 
                //实现person的getter方法,用于当请求转发后,其他界面数据访问
				return person;
		}

		@Override
		public Person getModel() {
               //重写ModleDriven的方法,返回定义的person对象
				return person;
		}

		@Override
		public String execute() throws Exception { 
               //实现跳转		  
              System.out.println(person.getPage()+""+person.getDate());
			         return SUCCESS;
			}
	}

 struts.xml:

<action name="register"class="org.viancent.action.RegisterAction">
	<result name="success">/result.jsp</result>
		<result name="input">/show.jsp</result>
		<interceptor-ref name="modelDriven"></interceptor-ref>
                 //实现模型驱动的拦截器
		<interceptor-ref name="defaultStack"></interceptor-ref>
</action>

 JSP(register.jsp)

如上:属性驱动的JSP界面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值