用户在做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代码如下:

  1. package com.northeasttycoon.action;
  2.  
  3. import com.northeasttycoon.model.PersonModel;
  4. import com.opensymphony.xwork2.ActionContext;
  5. import com.opensymphony.xwork2.ActionSupport;
  6. import com.opensymphony.xwork2.ModelDriven;
  7. /**
  8. @author NorthEastTycoon
  9. */
  10. public class LoginAction extends ActionSupport implements ModelDriven<PersonModel>{
  11.  
  12. private static final long serialVersionUID = 1L;
  13.  
  14. private PersonModel _personModel = new PersonModel();
  15.  
  16. @Override
  17. public PersonModel getModel() {
  18. return _personModel;
  19. }
  20.  
  21. public String execute() throws Exception{
  22. ActionContext _context = ActionContext.getContext();
  23. _context.put("person", _personModel);
  24. return SUCCESS;
  25. }
  26.  
  27. }

model类PersonModel.java

  1. package com.northeasttycoon.model;
  2. /**
  3. @author NorthEastTycoon
  4. */
  5. public class PersonModel {
  6. private String name; // 名字
  7. private String degree;// 等级
  8. private String age;//年龄
  9. private String company;//公司
  10. private String address;//地址
  11. private String telephone;//电话
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public String getDegree() {
  19. return degree;
  20. }
  21. public void setDegree(String degree) {
  22. this.degree = degree;
  23. }
  24. public String getAge() {
  25. return age;
  26. }
  27. public void setAge(String age) {
  28. this.age = age;
  29. }
  30. public String getCompany() {
  31. return company;
  32. }
  33. public void setCompany(String company) {
  34. this.company = company;
  35. }
  36. public String getAddress() {
  37. return address;
  38. }
  39. public void setAddress(String address) {
  40. this.address = address;
  41. }
  42. public String getTelephone() {
  43. return telephone;
  44. }
  45. public void setTelephone(String telephone) {
  46. this.telephone = telephone;
  47. }
  48.  
  49. }

struts.xml

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

web.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- northeasttycoon -->
  3. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns="http://java.sun.com/xml/ns/javaee"
  5. 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">
  6. <display-name>Struts 2</display-name>
  7. <welcome-file-list>
  8. <welcome-file>index.jsp</welcome-file>
  9. </welcome-file-list>
  10. <filter>
  11. <filter-name>struts2</filter-name>
  12. <filter-class>
  13. org.apache.struts2.dispatcher.FilterDispatcher
  14. </filter-class>
  15. </filter>
  16.  
  17. <filter-mapping>
  18. <filter-name>struts2</filter-name>
  19. <url-pattern>/*</url-pattern>
  20. </filter-mapping>
  21. </web-app>

index.jsp

  1. <%@ page contentType="text/html; charset=UTF-8"%>
  2. <%@ taglib prefix="tycoon" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title>Hello World</title>
  6. </head>
  7. <body>
  8. <center>
  9. <tycoon:form action="person">
  10. <tycoon:textfield lable="name" name="name"/>
  11. <tycoon:textfield lable="degree" name="degree"/>
  12. <tycoon:textfield lable="age" name="age"/>
  13. <tycoon:textfield lable="company" name="company"/>
  14. <tycoon:textfield lable="address" name="address"/>
  15. <tycoon:textfield lable="telephone" name="telephone"/>
  16. <tycoon:submit/>
  17. </tycoon:form>
  18. </center>
  19. </body>
  20. </html>

success.jsp

  1. <%@ page contentType="text/html; charset=UTF-8"%>
  2. <%@ taglib prefix="tycoon" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title>Hello World</title>
  6. </head>
  7. <body>
  8. <center>
  9. <tycoon:property value="#person.name"/></br>
  10. <tycoon:property value="#person.degree"/></br>
  11. <tycoon:property value="#person.age"/></br>
  12. <tycoon:property value="#person.company"/></br>
  13. <tycoon:property value="#person.address"/></br>
  14. <tycoon:property value="#person.telephone"/></br>
  15. </center>
  16. </body>
  17. </html>

执行的结果截图:

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

2. 点击提交

显示如下:

以上为实例截图.

Struts2 ModelDriven接口使用的更多相关文章

  1. 接触Struts2的ModelDriven<>接口

    最近在学SSH框架,实战项目,用到了Struts2的ModelDriven<>接口,在这做一点记录 ModelDriven,意为模型驱动,意思是直接把实体类当成页面数据的收集对象 参考他人 ...

  2. Struts2中的ModelDriven接口

    若没有实现ModelDriven的接口,Controll的代码会比较冗余,不能实现Controll和Model代码的分离 下面是没有实现ModelDriven接口的SuggestAction pack ...

  3. struts2 ModelDriven 和 Preparable 拦截器

    Struts2 运行流程图-1

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

    1). 先会执行 ModelDrivenInterceptor 的 intercept 方法. public String intercept(ActionInvocation invocation) ...

  5. Struts2 - ModelDriven 拦截器、Preparable 拦截器

    开篇:拦截器在Struts中的作用 在我们的web.xml中,我们配置了一个过滤器,实现将所有请求交付StrutsPrepareAndExecuteFilter类.一旦接受到任意action的请求,该 ...

  6. 关于继承modelDriven接口action的ajax来电参数

    例如   Model类如下面,Teacher,public class Teacher{  private Integer id. priavte  String name;  private Sch ...

  7. BaseAction编写:免去一些重复的代码,比如继承ActionSupport和实现ModelDriven接口

    1.BaseAction package com.learning.crm.base; import java.lang.reflect.ParameterizedType; import java. ...

  8. Struts2中的ModelDriven机制及其运用

    所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar.struts2.actions; public cla ...

  9. Struts2 DomainModel、ModelDriven接收参数

    一.DomainModel(域模型) 1. 应用场景:一般我们在struts2的action中接收参数通常是如下方式 package cn.orlion.user; import com.opensy ...

随机推荐

  1. java通过读取本地文件获取反射方法参数,执行对象方法

    运用到的知识点 IO流, 集合properties   反射 在工程目录下新建file   config.properties #one time only can run one method cl ...

  2. Java使用apache的开源数据处理框架commons-dbutils完成查询结果集的各种处理输出(8种方式)

    package demo; /* * QueryRunner数据查询操作: * 调用QueryRunner类方法query(Connection con,String sql,ResultSetHan ...

  3. DOM-window下的常用子对象-location-刷新页面

    1.刷新当前页面:(通过给location.href赋值的方式) window.location.href="" eg:window.location.href="htt ...

  4. 在C#用进程打开cmd与直接手动打开cmd是不一样的

    网上找不着答案,想了一下觉得可能是不同的用户,用set看了一下环境变量果然是不同用户,要改一下 按以下方法改: http://www.cnblogs.com/babycool/p/3569183.ht ...

  5. 浅谈.Net异步编程的前世今生----EAP篇

    前言 在上一篇博文中,我们提到了APM模型实现异步编程的模式,通过使用APM模型,可以简化.Net中编写异步程序的方式,但APM模型本身依然存在一些缺点,如无法得知操作进度,不能取消异步操作等. 针对 ...

  6. Mycat 做简单的读写分离(转载)

    大漠小狼的个人空间   http://www.51testing.com/html/34/369434-3686088.html 使用Mycat 做简单的读写分离(一) 原本使用的是amoeba做的读 ...

  7. 10.1综合强化刷题 Day4

    财富(treasure) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以 ...

  8. 关于<textarea>的内容中换行的表示方法

    <textarea>sdfsdfsffsd fer</textarea>

  9. goreplay使用

    最新版的发布公告:https://leonsbox.com/goreplay-v0-16-and-4th-anniversary-5408b1fd72e0 主要提到:中间件.报文解压.从kafka读取 ...

  10. 2017.2.12 开涛shiro教程-第七章-与Web集成

    2017.2.9 开涛shiro教程-第七章-与Web集成(一) 原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. ...