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. 点击提交
显示如下:

以上为实例截图.
Struts2 ModelDriven接口使用的更多相关文章
- 接触Struts2的ModelDriven<>接口
最近在学SSH框架,实战项目,用到了Struts2的ModelDriven<>接口,在这做一点记录 ModelDriven,意为模型驱动,意思是直接把实体类当成页面数据的收集对象 参考他人 ...
- Struts2中的ModelDriven接口
若没有实现ModelDriven的接口,Controll的代码会比较冗余,不能实现Controll和Model代码的分离 下面是没有实现ModelDriven接口的SuggestAction pack ...
- struts2 ModelDriven 和 Preparable 拦截器
Struts2 运行流程图-1
- 1. Action 实现 ModelDriven 接口后的运行流程
1). 先会执行 ModelDrivenInterceptor 的 intercept 方法. public String intercept(ActionInvocation invocation) ...
- Struts2 - ModelDriven 拦截器、Preparable 拦截器
开篇:拦截器在Struts中的作用 在我们的web.xml中,我们配置了一个过滤器,实现将所有请求交付StrutsPrepareAndExecuteFilter类.一旦接受到任意action的请求,该 ...
- 关于继承modelDriven接口action的ajax来电参数
例如 Model类如下面,Teacher,public class Teacher{ private Integer id. priavte String name; private Sch ...
- BaseAction编写:免去一些重复的代码,比如继承ActionSupport和实现ModelDriven接口
1.BaseAction package com.learning.crm.base; import java.lang.reflect.ParameterizedType; import java. ...
- Struts2中的ModelDriven机制及其运用
所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar.struts2.actions; public cla ...
- Struts2 DomainModel、ModelDriven接收参数
一.DomainModel(域模型) 1. 应用场景:一般我们在struts2的action中接收参数通常是如下方式 package cn.orlion.user; import com.opensy ...
随机推荐
- 浅谈.Net异步编程的前世今生----EAP篇
前言 在上一篇博文中,我们提到了APM模型实现异步编程的模式,通过使用APM模型,可以简化.Net中编写异步程序的方式,但APM模型本身依然存在一些缺点,如无法得知操作进度,不能取消异步操作等. 针对 ...
- mysql数据库基本操作(六)
外键约束 创建外键 前面讲的表单查询都是一张表,但项目中表与表之间是有关联的,比如我们创建的学生表,他们可能在不同班级,不同班级有不同的班主任,他们之间的关系大概是这样的:每一个班主任会对应多个学生 ...
- 10.1综合强化刷题 Day2 afternoon
最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n的 ...
- Android OkHttp经验小结
OkHttp应该是目前最完善,也是相当流行的一个底层网络请求库.Google都在用,所以有必要深入了解一下,刚好最近在重构公司项目的网络层,就顺便梳理一下.———–12.29————最近暂时没有时间详 ...
- Linux sed 批量替换字符串和更多用法
比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: # sed -i “s/zhangsan/lisi/g” `grep zhangsan -rl /module ...
- node在Fedora 22系统下开发环境搭建
事实上,环境搭建在linux系统还是比較简单的,下载已经编译好的包,配置一下环境变量. 或者下载源代码,自己编译. 这里记录一下,主要是node版本号变化节奏很块的情况下.怎样配置一次环境变量就不要再 ...
- 数据结构之---C语言实现图的数组(邻接矩阵)存储表示
//图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #define MAX_VEX_NUM 50 typedef c ...
- es6 - 箭头
class User { constructor(name, age) { this.name = name; this.age = age; } changeName(name) { this.na ...
- css样式表可以被嵌入网页里面吗?
我们一般听说的是:javascript可以被嵌入到网页任何地方? 而我们一直忽略了css也可以嵌入到网页任何地方 不过,建议这种方式少写,为了浏览器的渲染速度,但对于行内样式来说,这种方式还是比较有效 ...
- codeforces 204(Div.1 A) Little Elephant and Interval(贪心)
题意: 有一种个位数与最高位数字相等的数字,求在l,r的范围内,这样的数字的个数. 思路: 找下规律就知道当当n>10的时候除去个位以后的答案等于n/10,然后考虑第一个数字是否小于最后一个.小 ...