`
PerfectPlan
  • 浏览: 122504 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多

 

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界面
4
0
分享到:
评论

相关推荐

    struts2-json-plugin源码

    5. **Action与模型驱动**:如果Action使用模型驱动模式,那么JSON插件可以直接将Action的Model对象转换为JSON,无需手动设置每个属性。 6. **类型转换**:Struts2的类型转换器在处理JSON请求时起着关键作用,将JSON...

    struts2-016/017漏洞解决

    Struts2是一个非常流行的Java Web开发框架,它提供了一种模型-视图-控制器(MVC)架构,便于开发者创建动态、数据驱动的Web应用程序。然而,任何软件都可能存在安全漏洞,Struts2也不例外。"struts2-016/017漏洞"指...

    struts-json-plugin-2.1.8.jar struts2-junit-plugin-2.1.8.jar json-lib-2.1.jar

    Struts2是一个非常流行的Java Web开发框架,它提供了一种模型-视图-控制器(MVC)架构,便于开发者构建动态、数据驱动的Web应用程序。然而,在开发过程中,经常会出现库文件版本不兼容的问题,这可能导致程序运行...

    struts2-json-plugin-2.1.8jar包.zip

    使用Struts2 JSON Plugin,开发者可以设置Action的返回类型为"json",这样在Action执行完毕后,Struts2会自动将Action的模型驱动数据转化为JSON格式并发送到客户端。这大大简化了服务器端与客户端之间通过HTTP传递...

    struts2-core-2.0.11.jar

    8. **模型驱动(ModelDriven)和拦截器链(Interceptor Stack)**:Struts2支持模型驱动方式,通过一个通用的Model接口,可以简化Action的编写。同时,拦截器链允许开发者自定义拦截器顺序,实现复杂逻辑。 9. **...

    struts-2.1.8-LIB包

    3. **ognl.jar**:Object-Graph Navigation Language(OGNL)是Struts 2中的表达式语言,用于在视图层和模型层之间传递数据。OGNL支持属性访问、方法调用、动态对象创建等。 4. **freemarker.jar**:FreeMarker是一...

    struts2-2.3.32-all

    Struts2是一个非常著名的Java Web开发框架,它提供了一种模型-视图-控制器(MVC)架构,便于开发者创建动态、数据驱动的Web应用程序。标题中的"struts2-2.3.32-all"指的是Struts2框架的2.3.32版本的完整包,通常包含...

    struts2-1_struts2-1_threepze_

    在Web开发中,Struts2提供了一种组织应用程序结构和控制流程的方法,使得开发者能够更有效地构建动态、数据驱动的Web应用。这个名为"struts2-1_struts2-1_threepze_"的项目很可能是某个开发者或教学资源创建的,用于...

    Struts2-api

    10. **Tiles框架集成**:Struts2与Tiles框架的结合,使得页面布局和组件化变得简单,可以创建复杂的页面结构。 以上只是Struts2-api中涵盖的部分核心概念和功能,实际使用中,开发者还需要深入学习每个组件的工作...

    Struts2-2.2.1

    4. **模型驱动(ModelDriven)**:通过实现`ModelDriven`接口,Action可以直接绑定到一个模型对象,简化了代码。 5. **值栈(Value Stack)**:值栈是Struts2中的数据存储结构,它管理Action的属性值,可以方便地将...

    struts-2.5.2-all.zip

    5. **模型驱动(ModelDriven)**:该接口允许开发者将模型对象与Action类关联,使得业务数据可以直接在视图层访问。 6. **OGNL(Object-Graph Navigation Language)**:Struts 2内部大量使用OGNL作为表达式语言,...

    struts2-lib.rar

    Struts2 Action类作为控制器,处理用户的请求,与模型交互,然后将处理结果转发给相应的视图进行显示。 2. **拦截器**:Struts2的核心特性之一是拦截器,它们允许在Action调用前后插入自定义逻辑,比如日志记录、...

    struts2.3.34依赖jar包

    8. **Spring集成**:如果项目使用Spring框架,`struts2-spring-plugin.jar` 可以帮助整合Struts2与Spring的依赖注入和事务管理。 9. **测试支持**:Struts2提供了测试工具,如`struts2-test-plugin.jar`,方便进行...

    struts2-API.rar

    9. **模型驱动**: Struts2支持模型驱动的方式,允许Action直接引用业务对象,简化了视图和模型的交互。 10. **类型转换**: Struts2自动处理表单提交的数据类型转换,通过`Converter`接口和`ConversionService`实现...

    struts2-2.3.16.1

    10. **最佳实践**:使用Struts2时,应遵循最佳实践,如使用模型驱动而非表单驱动,避免在Action中直接写HTML,以及正确配置和使用拦截器,以提高代码的可维护性和安全性。 总之,Struts2-2.3.16.1是一个强大且成熟...

    struts2-spring3-hinernate4

    Struts2的核心是Action,Action是业务逻辑的载体,通过配置文件或注解与URL路径进行绑定。同时,Struts2支持多种结果类型,如JSP、FreeMarker等,以及拦截器(Interceptor)机制,能够方便地添加日志、权限验证等...

    struts-2.5.14.1-apps struts2官方例程

    4. **模型驱动(Model Driven)**:理解模型驱动的概念,如何将Action类与业务对象绑定,简化Action代码。 5. **动态方法访问(Dynamic Method Invocation,DMI)**:了解如何启用DMI,允许Action方法名通过URL动态...

    struts2-blank-2.1.6

    1. **模型驱动**:Struts2提供了一种灵活的数据绑定机制,允许开发者将表单数据自动绑定到业务对象,简化了模型与视图之间的交互。 2. **动作和结果**:Struts2的动作类是处理用户请求的核心,每个动作类对应一个...

    Struts2.2-doc.zip

    5. **模型驱动**:Struts2支持模型驱动,使得Action可以直接操作业务对象,减少了数据绑定的复杂性。 6. **插件架构**:Struts2拥有丰富的插件体系,如Tiles、Freemarker、JSON等,这些插件扩展了框架的功能,便于...

    struts2--3.Ognl与值栈

    **Struts2与OGNL和值栈的关系** Struts2通过OGNL与值栈的结合,实现了强大的数据绑定和表达式解析能力。当用户提交表单数据时,Struts2会使用OGNL将这些数据绑定到值栈中的Action对象。然后,Action执行业务逻辑,...

Global site tag (gtag.js) - Google Analytics