`
txf2004
  • 浏览: 6883139 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2三种数据转移方式

 
阅读更多


Struts2提供了JavaBean属性,JavaBean对象,ModelDriven对象三种方式来保存HTTP请求中的参数。下面通过一个最常见的
登录的例子来看下这三种数据转移方式。页面代码很简单,提交表单中包含有用户名和密码,在Action中得到这两个参数从而
验证用户是否登录成功。

一、JavaBean属性


<%@ page contentType="text/html;charset=UTF-8" %>

<html>

<head></head>

<body>
	<h1>登录页</h1>
	
	<form action="/cdai/login" method="post">
	
		<div>
			<label for="username">名称:</label>
			<input id="username" name="username" type="textfield"/>
		</div>
		
		<div>
			<label for="password">密码:</label>
			<input id="password" name="password" type="password"/>
		</div>
		
		<div>
			<label for="rememberMe">
				<input id="rememberMe" name="rememberMe" type="checkbox"/> 记住我
			</label>
			<input type="submit" value="登录"></input>
		</div>
		
	</form>
	
</body>

</html>

package com.cdai.web.ssh.action;

import com.cdai.web.ssh.request.LoginRequest;
import com.cdai.web.ssh.service.UserService;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction implements Action {

	private String username;
	
	private String password;
	
	private UserService userService;
	
	@Override
	public String execute() {
		
		System.out.println("Login action - " + request);
		
		return SUCCESS;
	}

	public String getUsername() {
		return request;
	}

	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getPassword() {
		return request;
	}

	public void setPassword(String Password) {
		this.Password = Password;
	}
	
}

这种方式比较简明,直接将表单中的参数保存到Action中的属性中。Action在验证时可能还需要将用户名和密码再封装成Dto的
形式传给Service层进行验证。所以为什么不更进一步,直接将用户名和密码保存到Dto中。


二、JavaBean对象


<%@ page contentType="text/html;charset=UTF-8" %>

<html>

<head></head>

<body>
	<h1>登录页</h1>
	
	<form action="/cdai/login" method="post">
	
		<div>
			<label for="username">名称:</label>
			<input id="username" name="request.username" type="textfield"/>
		</div>
		
		<div>
			<label for="password">密码:</label>
			<input id="password" name="request.password" type="password"/>
		</div>
		
		<div>
			<label for="rememberMe">
				<input id="rememberMe" name="rememberMe" type="checkbox"/> 记住我
			</label>
			<input type="submit" value="登录"></input>
		</div>
		
	</form>
	
</body>

</html>

package com.cdai.web.ssh.action;

import com.cdai.web.ssh.request.LoginRequest;
import com.cdai.web.ssh.service.UserService;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction implements Action {

	private LoginRequest request;
	
	private UserService userService;
	
	@Override
	public String execute() {
		
		System.out.println("Login action - " + request);
		
		return SUCCESS;
	}

	public LoginRequest getRequest() {
		return request;
	}

	public void setRequest(LoginRequest request) {
		this.request = request;
	}
	
}

这样就可以很方便地直接调用Service层了。但是有一个小缺点就是这样加深了页面参数名的深度,只有为参数名加上request
前缀(Action中的属性名)才能使Struts2通过OGNL将表单中的参数正确保存到request对象中。


三、ModelDriven对象


<%@ page contentType="text/html;charset=UTF-8" %>

<html>

<head></head>

<body>
	<h1>登录页</h1>
	
	<form action="/cdai/login" method="post">
	
		<div>
			<label for="username">名称:</label>
			<input id="username" name="username" type="textfield"/>
		</div>
		
		<div>
			<label for="password">密码:</label>
			<input id="password" name="password" type="password"/>
		</div>
		
		<div>
			<label for="rememberMe">
				<input id="rememberMe" name="rememberMe" type="checkbox"/> 记住我
			</label>
			<input type="submit" value="登录"></input>
		</div>
		
	</form>
	
</body>

</html>

package com.cdai.web.ssh.action;

import com.cdai.web.ssh.request.LoginRequest;
import com.cdai.web.ssh.service.UserService;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction implements Action, ModelDriven<LoginRequest> 
{

	private LoginRequest request = new LoginRequest();
	
	private UserService userService;
	
	@Override
	public String execute() {
		
		System.out.println("Login action - " + request);
		
		return SUCCESS;
	}

	@Override
	public LoginRequest getModel() {
		return request;
	}
	
}

这种方式要多实现一个ModelDriven接口,将ModelDriven提供的对象也保存到ValueStack上,从而使前台页面可以直接通过
username和password属性名来定义表单的参数名了。

三种方式具体采用哪种不能一概而论,还是看项目的具体需求再自己定吧!


分享到:
评论

相关推荐

    Struts2 in action中文版

    5.1 数据转移和类型转换:Web应用程序领域的常见任务 85 5.2 OGNL和Struts 2 85 5.2.1 OGNL是什么 85 5.2.2 OGNL如何融入框架 87 5.3 内建的类型转换器 89 5.3.1 立即可用的类型转换器 89 5.3.2 使用OGNL表达式从...

    详解Java的Struts2框架的结构及其数据转移方式

    主要介绍了详解Java的Struts2框架的结构及其数据转移方式,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下

    struts2 标签库 帮助文档

    struts2框架的标签库分为三类: 用户标签:生成HTML元素 非用户标签:数据访问、逻辑控制等。 AJAX标签:支持AJAX技术。 用户界面标签又分两类: 表单标签:生成HTML页面的from元素 非表单标签:生成页面上的...

    Struts2+API+标签全解+网页说明

    optiontransferselect标签:创建两个选项以及转移下拉列表项,该标签生成两个下拉列表框,同时生成相应的按钮,这些按钮可以控制选项在两个下拉列表之间移动、排序。 radio标签:单选框。 optgroup标签:生成一个...

    Struts in Action中文版

    2. 深入 STRUTS架构..................................................................................37 2.1. 随便谈谈......................................................................................

    lever:交易系统和数据网格的Struts

    交易系统和数据网格的Struts 杠杆是一个用于编写事务系统(特别是用于内存中数据)的库。 它由各个部分组成: index :索引和查找结构stats :统计结构sync :事务系统的同步原语table :由事务算法支持的各种KV表...

    structs程序设计从入门到精通word文档

    13.1 使用Struts Bean标签保存与传输数据小实例 15 第14章 Struts Logic标签库 15 14.1 如何使用Logic标签进行基于值的条件显示 15 14.1 如何使用Logic标签进行字符串匹配 15 14.1 如何使用Logic标签来检测值是否...

    struts in Action

    2. 深入STRUTS 架构..................................................................................37 2.1. 随便谈谈.......................................................................................

    struts+hibernate住房公积金管理系统 练习

    到帐确认 当职工的缴交公积金总金额转到银行帐号后,银行将汇缴和支取情况提交资金中心确认,从而产生中心的内部业务数据。 销户 当职工因各种原因不在交纳公积金(如:出国、死亡等原因)已不再缴交公积金时的处理...

    外文翻译 stus MVC

    Struts is a set of cooperating classes, servlets, and JSP tags that make up a reusable MVC 2 design. This definition implies that Struts is a framework, rather than a library, but Struts also contains...

    Spring面试题

    条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据 c) 第三方缓存的实现 5. Hibernate的查询方式 Sql、Criteria,object comptosition Hql: 1、 属性查询 ...

    ssh(structs,spring,hibernate)框架中的上传下载

     由于Spring通过代理Hibernate完成数据层的操作,所以原Hibernate的配置文件hibernate.cfg.xml的信息也转移到Spring的配置文件中:  代码 4 Spring中有关Hibernate的配置信息 1. 2. !-- 数据源的配置 //--> 3. ...

    基于Java的execl导入例子

    本资源为基于Java的execl导入的一个小Demo,这里采用的主要开发框架是Struts2,但这个execl导入功能也是能够轻松转移到其他开发框架的,要注意的是其中的jar包。本Demo中的实体类中所声明的字段,就是要导入的数据...

    webpagetest:Salt States 部署私有网页测试实例

    要求视窗服务器 2012 R2 假设有一个正确配置的 Salt Master,包括: 盐云提供商盐云配置文件盐云地图文件Struts数据还假定云负载均衡器作为前端的故障转移工具。地点设置位置时,您必须在 Pillar 中为每个位置创建一...

    超级有影响力霸气的Java面试题大全文档

     ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,...

    java 面试题 总结

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...

    pa-anticipatory-action

    人道协调厅预期行动框架 (AAF) 包括三个预先商定的Struts:资金、活动和触发器。 触发器定义了框架应响应的特殊冲击(原因和影响)。 当预测表明冲击可能会实现时,该框架就会激活。 然后Swift拨付资金并实施干预...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    另外,对Struts 1.x的支持被独立成 'spring-webmvc-struts.jar'。 注意:经常被使用的的Spring的DispatcherServlet也是Spring Web MVC框架中的一部分。因此,就算你只是为了远程访问(例如,暴露Hessian或者 HTTP...

Global site tag (gtag.js) - Google Analytics