`

Struts2(17):Struts2深入探索续

阅读更多

1,struts2有属性驱动方式与模型驱动两种方式:之前的例子都是使用属性驱动,下面来看看模型驱动的方式

先将之前RegisterAction中的所有属性取出,如username,password,repassword等 。。。。,在bean包下新建一个JavaBean类User,将从RegisterAction中属性放入此Bean中。

 

 User.java

package com.test.bean;

import java.sql.Date;

public class User {
	private String username;
	private String password;
	private String repassword;
	private int age;
	private Date birthday;
	private Date graduation;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getRepassword() {
		return repassword;
	}
	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public Date getGraduation() {
		return graduation;
	}
	public void setGraduation(Date graduation) {
		this.graduation = graduation;
	}
}

 

然后新建一个RegisterAction2.java.需实现ModelDriven接口

package com.test.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.test.bean.User;

public class RegisterAction3 extends ActionSupport implements ModelDriven {
	private User user = new User();

	public Object getModel() {
		return user;
	}

}

 

这样就实现了struts2的模型驱动。但还是建议使用属性驱动。

模型驱动是由拦截器实现的,具体的拦截器为ModelDrivenInterceptor,在struts-default.xml文件中有对此拦截器定义。

 

2,Preparable接口

此接口有一个prepare()方法,实现此接口的action,会先执行prepare()方法,如

package com.test.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.test.bean.User;

public class RegisterAction3 extends ActionSupport implements ModelDriven,Preparable {
	private User user = new User();

	public Object getModel() {
		return user;
	}

	public void prepare() throws Exception {
		System.out.println("hello world");
	}
}

 这个action会首先打印出hello world,再执行其它方法。

 

2,将struts2的错误提示显示在每个表单的后面

<s:form action="register" theme="simple">
	    <tr>
	    	<td>username:</td>
	    	<td>
	    		<s:textfield name="username">
	    		</s:textfield>
	    	</td>
	    	<td>
	    		<s:fielderror>
	    			<s:param>username</s:param>
	    		</s:fielderror>
	    	</td>
	    </tr>

 

3,验证表单重复提交,有些页面只允许提交一次,如注册页面

在jsp页面上加一个token标签

 

<s:form action="register" theme="simple">
  	<s:token name="hello"></s:token>

查看其生成页面的HTML文件,如下

<input type="hidden" name="hello" value="8S6MOOA3YX76ZUXZ8WZ1I29NNFC2E3JW" />

其中的value值是由struts2加密生成的,此页面提交后,value值会放在session中,在用户下一次再提交时,页面的value值不变,但服务器session中的value值已被删除,导致验证不通过,以达到避免重复提交。

由于此功能是由TokenInterceptor拦截器实现的。在struts-default.xml文件中有声明此拦截器,但默认拦截器栈并没有包含此拦截器。

因此需要在自己的action中引用此拦截器,并且要加一个特别result,用户指定当token不合法时,跳转的页面

 

<result name="invalid.token">/register.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>

 

 用户提交成功后,若想刷新页面再提交一次,则会不成功。

分享到:
评论

相关推荐

    struts八步教程:struts让我试着了解你

    Struts 是一个开源的Java Web框架,它主要用来构建企业级的应用程序,特别是那些基于Model-View-Controller(MVC)架构的Web应用。...在这个过程中,不断探索和解决问题,你的Struts技能将更加熟练。

    struts2简单例子

    - 配置Struts2:在`struts.xml`配置文件中定义Action类、结果页面和拦截器。 - 创建Action类:这是处理用户请求的核心,实现业务逻辑。 - 编写JSP页面:使用Struts2的标签库来展示数据和处理用户输入。 3. **...

    struts2学习笔记十九(第19讲.Struts2深入探索 续)

    在第19讲“Struts2深入探索”中,我们将继续深入理解Struts2的核心特性和工作原理,这包括但不限于配置、拦截器、插件、以及源码分析。以下是关于Struts2的一些关键知识点: 1. **MVC模式**:Struts2遵循Model-View...

    Struts2视频教程

    - **深入源码**:针对某些重要知识点,比如Action的执行流程、拦截器的工作原理等,本教程还会带领学员一起探索源码,加深对框架内部机制的理解。 ### 结语 通过以上对Struts2各个方面的介绍,可以看出Struts2不仅...

    Struts2Demo2

    在这个项目中,我们将深入探讨Struts2的关键特性、配置以及它如何协调各个组件来实现业务逻辑和用户界面的分离。 首先,了解Struts2的基础架构至关重要。Struts2的核心是Action类,它是处理用户请求并执行业务逻辑...

    <<深入浅出Struts 2>>中文版 下载

    《深入浅出Struts 2》是一本专为Java开发者设计的书籍,旨在全面解析Struts 2框架的原理、特性和实际应用。Struts 2是Java Web开发中的一个热门框架,它提供了强大的MVC(Model-View-Controller)架构支持,极大地...

    struts2学习笔记十八(第18讲.Struts2深入探索)

    在第18讲“Struts2深入探索”中,我们将会探讨Struts2的一些高级特性和深入使用的技巧。这篇学习笔记将主要围绕以下几个核心知识点展开: 1. **拦截器(Interceptors)**: Struts2的核心特性之一是拦截器,它允许...

    [原]Struts2-深入探索

    Struts2 深入探索 Struts2 是一个基于 Model-View-Controller(MVC)设计模式的Java Web框架,它旨在简化开发过程并提供更健壮的控制层。Struts2 结合了WebWork的优秀特性与Struts1的优点,提供了更强大的功能和更...

    struts2 自定义标签

    本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许开发者创建自己的HTML标签,这些标签可以封装复杂的业务逻辑,使得...

    struts2 demo project

    这个"struts2 demo project"是为了帮助开发者理解和实践Struts2框架而创建的一个示例项目,旨在提供一个基础的、可运行的实例,让大家能够深入探索Struts2的核心特性和功能。 在Struts2框架中,以下是一些关键知识...

    自己写的 Struts 2源代码 例子(包括Struts2 标签)

    Struts 2是一款强大的MVC(Model-...深入研究这些例子,将有助于你掌握Struts 2的核心特性和实际应用,为构建高效、可维护的Java Web应用打下坚实基础。在实践中不断探索和学习,你将能更好地理解和运用Struts 2框架。

    Struts2框架搭建

    Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建可维护性和可扩展性极高的Java Web应用程序。...对于初学者来说,了解和实践上述步骤是掌握Struts2框架的第一步,后续可以逐步探索更多高级特性和最佳实践。

    手动搭建struts2环境

    总的来说,手动搭建Struts2环境虽然相对繁琐,但通过这个过程,开发者能更深入地理解Struts2框架的工作机制,这对于学习和掌握Struts2来说是十分有益的。随着对框架理解的深入,你可以进一步探索如何优化配置、整合...

    struts2入门级的例子

    Struts2是一个强大的Java EE应用程序框架,主要用于...当你对这些基础有了一定的了解后,可以进一步探索Struts2的高级特性,如国际化、上传下载、AJAX支持等。不断实践和深入研究,将使你在Struts2开发领域更加熟练。

    Struts2入门案例 实现简单的Struts2入门jar包.rar

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的Web应用程序。...随着对Struts2的深入学习,你还可以探索更高级的主题,如拦截器的自定义、国际化、异常处理等,进一步提升你的Web开发技能。

    Struts2 英文版

    Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、高效且易于维护的Web应用。这本书"Struts2 In Action"是深入探讨...通过这本书,你可以深入探索Struts2的每一个角落,从而在实际项目中更加得心应手。

    Struts2环境配置与基本操作演示

    在本教程中,我们将深入探讨Struts2的基础知识,包括环境配置、OGNL(Object-Graph Navigation Language)以及值栈和域的概念。 首先,让我们开始介绍如何配置Struts2环境。安装Struts2需要以下步骤: 1. **添加...

    struts2 helloword工程

    在本项目“struts2 helloworld”中,我们将会探索如何在MyEclipse 6.0集成开发环境中,利用JDK 1.6和Tomcat 6.0服务器来搭建一个基本的Struts2应用。 首先,我们需要安装和配置这些必要的工具。MyEclipse 6.0是一个...

Global site tag (gtag.js) - Google Analytics