Struts2 ModelDriven接口使用

用户在做http请求时一般都有两种方式:get和post方式.get方式用来获取查询相关信息,既向服务器获得信息,而post方式用来更新信息既向服务器提交数据.通常情况下,用get方式向服务器获取信息是附带的信息量都比较少,可以用servlet API来一个一个获取,但是当post方式提交数据时,往往数据量都比较大,如果用servlet API方式获取数据代码过于臃肿,维护和修改比较复杂降低了程序员工作效率.strtus2框架提供了ModelDrvem接口,对于实现接口Action来说只需定义Model,struts2框架就会自动将用户提交的http信息赋给相应的model.

以下已实例的方式说明,项目包括:action类LoginAction.java,model类PersonModel.java,struts.xml,web.xml文件,index.jsp,success.jsp文件.

1. 建立WEB工程  Struts2ModelDrivenDemo,添加相关的动态库和开发包,请参照前面介绍

2. 总体项目结构图如下:

3. 项目的代码介绍

Action类 LoginAction代码如下:

package com.northeasttycoon.action;

import com.northeasttycoon.model.PersonModel;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
@author NorthEastTycoon
*/
public class LoginAction extends ActionSupport implements ModelDriven<PersonModel>{

	private static final long serialVersionUID = 1L;

	private PersonModel _personModel = new PersonModel();

	@Override
	public PersonModel getModel() {
		return _personModel;
	}

	public String execute() throws Exception{
		ActionContext _context = ActionContext.getContext();
		_context.put("person", _personModel);
		return SUCCESS;
	}

}

model类PersonModel.java

package com.northeasttycoon.model;
/**
@author NorthEastTycoon
*/
public class PersonModel {
	private String name;    // 名字
	private String degree;// 等级
	private String age;//年龄
	private String company;//公司
	private String address;//地址
	private String telephone;//电话
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDegree() {
		return degree;
	}
	public void setDegree(String degree) {
		this.degree = degree;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getTelephone() {
		return telephone;
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}

}

struts.xml

<?xml version="1.0" encoding="UTF-8"?><!-- northeasttycoon -->
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <package name="default" namespace="/" extends="struts-default">
      <action name="person"   class="com.northeasttycoon.action.LoginAction">
            <result name="success">/success.jsp</result>
      </action>
   </package>
</struts>

web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- northeasttycoon -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Struts 2</display-name>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

index.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="tycoon" uri="/struts-tags"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<center>
 <tycoon:form action="person">
 	<tycoon:textfield lable="name" name="name"/>
 	<tycoon:textfield lable="degree" name="degree"/>
 	<tycoon:textfield lable="age" name="age"/>
 	<tycoon:textfield lable="company" name="company"/>
 	<tycoon:textfield lable="address" name="address"/>
 	<tycoon:textfield lable="telephone" name="telephone"/>
 	<tycoon:submit/>
 </tycoon:form>
</center>
</body>
</html>

success.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="tycoon" uri="/struts-tags"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<center>
 <tycoon:property  value="#person.name"/></br>
<tycoon:property  value="#person.degree"/></br>
 <tycoon:property  value="#person.age"/></br>
<tycoon:property  value="#person.company"/></br>
<tycoon:property  value="#person.address"/></br>
<tycoon:property  value="#person.telephone"/></br>
</center>
</body>
</html>

执行的结果截图:

1. 浏览器输入:http://localhost:8080/Struts2ModelDrivenDemo 显示如下图

2. 点击提交

显示如下:

以上为实例截图.

时间: 2024-12-21 13:31:21

Struts2 ModelDriven接口使用的相关文章

1. Action 实现 ModelDriven 接口后的运行流程

1). 先会执行 ModelDrivenInterceptor 的 intercept 方法. public String intercept(ActionInvocation invocation) throws Exception { //获取 Action 对象: EmployeeAction 对象, 此时该 Action 已经实现了 ModelDriven 接口 //public class EmployeeAction implements RequestAware, ModelDri

关于有继承modelDriven接口的action的ajax调用传入参数

如   Model类如下,Teacher,public class Teacher{ private Integer id: priavte  String name; private School school; } 而School, public class School{ private Integer id: priavte  String name; } 上面的Teacher,School省去了getter和setter方法. action类如下 public class Teache

struts2 Preparable 接口的使用

问题背景:在一个编辑页面中,如果这个页面中没有将表中所有的字段都用显示表单的形式显示出来,并且提供的修改sql是将所有的字段全部update,那么这个页面中就需要将没有显示出来的字段或者使用lable显示的字段全部使用隐藏域放在编辑页面中,这样做太麻烦了! 那么问题来了,有没有更好的解决办法呢? 有,当然有!struts2的Prepare接口很好的解决了这个问题,确切的说struts2中有一个与之相对应的内置过滤器! 下面来介绍一下,这个接口该如何使用呢?很简单! 1. 随便一个action类,

Struts2中的ModelDriven机制及其运用

为什么需要ModelDriven 所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar.struts2.actions; public class User { private int id; private String username; private String password; private int age; private String address; public String ge

Struts2 DomainModel、ModelDriven接收参数

一.DomainModel(域模型) 1. 应用场景:一般我们在struts2的action中接收参数通常是如下方式 package cn.orlion.user; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private String username; private String password; public String getUsernam

[JavaWeb基础] 018.Struts2 MVC架构之ModelDriven

用过struts1的人接触struts2的时候,通常会产生一个疑惑,明明struts1已经把action的form分开了,为什么struts2确把模型放在action中定义.其实这个方式只是想让action更加直观,但是如果表单数据过多的话,action类就会出现过于冗长,所以struts2的ModelDriven就要出来解决问题了.下面讲讲ModelDriven的机制 1.工作原理 ModelDriven的机制背后就是ValueStack.界面可以通过直接指定对象的属性名就能给对象进行赋值.

Struts2中的ModelDriven机制及其运用(转)

所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar.struts2.actions; public class User { private int id; private String username; private String password; private int age; private String address; public String getUsername() { ret

[原创]java WEB学习笔记64:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) ModelDriven拦截器 paramter 拦截器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

struts2回顾之一:ModelDriven机制中的refreshModelBeforeResult属性

已经和三大框架久违多时了,前段时间搞了一段时间的Android,各方面的知识都有所增长,但是框架的一些核心基础知识也忘得差不多了,在今后的时间里,我会不定期的发表框架中的一些基础知识的运用. 首先想介绍的是struts2的原型驱动ModelDriven机制. 所谓的ModelDriven,就是把一个实体类当成页面数据的收集对象.用法看起来像下面这个样子 <span style="font-size:14px;">public class UserAction impleme