`
黑暗浪子
  • 浏览: 507875 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2讲义4

阅读更多
使用ActionSupport进行校验
如果From数据操作有误,比如输入不是我们需要的数据,又或者没有输入等输入原因。Action实例执行execute方法前会使用校验来进行控制。本节就是介绍如何在Struts2中实现校验功能。
技术要点
本节代码中还是使用登录功能作为示例
Action类中ActionSupport使用以及validate方法重写实现。
 属性文件messageResource.properties定义以及JSP页面上错误信息如何显示。
 导航结果页面演示。

演示代码
<!-------------------------文件名:LoginAction.java------------------->
public class LoginAction extends [b]ActionSupport [/b]{
	//校验方法,用来校验输入值为空或没有输入返回错误信息
	public void validate() {
		if (getUsername() == null || getUsername().trim().equals("")) {
			//返回错误信息键值,user.required包含具体内容见messageResource.properties
			addFieldError("username", getText("user.required"));
		}
		if (getPassword() == null || getPassword().trim().equals("")) {
			//返回错误信息键值,pass.required包含具体内容见messageResource.properties
			addFieldError("password", getText("pass.required"));
		}
	}
}
struts.properties定义显示信息文件名
<!------------------------------文件名:struts.properties -------------------------->
#支持本地化的资源文件名定义
struts.custom.i18n.resources=messageResource
messageResource.properties定义出错信息
<!-------------------------------------------文件名:messageResource.properties -------------------------------->
#用key=value格式定义页面上显示的内容
user.required=请输入用户名!
pass.required=请输入密码!

登录JSP代码:
<!-------------------------文件名:login.jsp ------------------------>
<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2标签库调用声明 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
	<title>登录页面</title>
</head>
<body>
	<!-- form标签库定义,以及调用哪个Action声明 -->
	<s:form action="Login">
		<table width="60%" height="76" border="0">
				<!-- 各标签定义 -->
				<s:textfield name="username" label="用户名"/>
				<s:password name="password" label="密  码" />
				<s:submit value="登录" align="center"/>				
		</table>
	</s:form>
</body>
</html> 
登录页面如图4.1所示。

图4.1  登录初始页面
不输入直接登录显出出错页面如图4.2所示。

图4.2  错误提示页面
输入数据页面如图4.3所示。

图4.3  输入数据页面
登录成功JSP代码:
<!------------------------文件名:success.jsp ------------------------>
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
   <title>登录成功</title>
</head>  
<body>
	<!-- 取得session中用户名值 -->
    ${sessionScope.user},欢迎您~~
</body>
</html> 
登录成功页面如图4.4所示。

图4.4  登录成功页面
代码解释
(1)LoginAction类中继承ActionSupport类,此类也是Struts2自带的类之一。该类有一个validate方法,所以继承ActionSupport类的Action子类都可以通过重写此方法来定义自己开发的项目操作失败后的错误提示信息。
注意:Struts2类库里有个BaseAction类,该类也是继承ActionSupport类的。因此也可以在具体Action类代码里,直接继承BaseAction类。比如在LoginAction代码粗体所示处,将“ActionSupport”改为“BaseAction”,这样同样可以重写validate方法,不会产生任何编译错误。
如代码所示出错信息,其中addFieldError方法和getText方法也是ActionSupport类的方法,只是Action子类是直接调用没有重写它们。addFieldError方法顾名思义就是对JSP页面上Form中某个需要校验的field,如果操作有错误时候如何进行错误信息处理的方法。比如“username”就是JSP页面上这个字段的名字,而“user.required”是错误信息属性文件里定义的。我们使用getText方法可以得到属性文件里“user.required”对应的具体错误信息。
注意:validate方法一般都是Action类执行execute方法之前执行,这样如果操作失败,就直接返回到struts.xml中定义的“input”指向的URL。而“input”指向的JSP页面也正是登录初始页面,如图4.2所示,在登录初始页面显示了错误提示信息。
(2)在Struts2中还有个很重要的概念就是属性文件,一般有个名字为struts.properties的属性文件是Struts2中全局属性配置的文件。如代码里看到的,对于本地化的处理,直接使用该文件里定义的messageResource.properties文件。
(3)messageResource.propertie文件定义的两个属性就是在Action类里显示的“user.required”和“pass.required”,采用“key=value”格式,定义了具体错误信息内容。
如果result值为“success”则转到success.jsp。在该示例中这个页面代码中我们显示了之前放置在HTTP的session里的用户名值。如图4.4所示。
如果result值为“input”则转到login.jsp。在该示例中,login.jsp将之前所述的错误提示信息值在JSP页面上显示。如图4.2所示。
(4)login.jsp里用Struts2的标签库显示Form和它里面各字段定义。具体标签使用方式可见之后章节内容,在此就不详述了。唯一值得说的就是只有在JSP页面使用Form标签,这节叙述的校验功能才会起作用。因为Form标签本身已具备显示校验错误的能力。
  • 大小: 36 KB
  • 大小: 39.3 KB
  • 大小: 40.1 KB
  • 大小: 32.9 KB
分享到:
评论
7 楼 黑暗浪子 2009-10-26  
zhangyuqing052 写道
黑暗浪子 写道
zhangyuqing052 写道
应想将页面控件布局,顾 <br><s:form action="login" method="post" <span style="color: #ff0000;">theme="simple"</span>> <br>采用此方式; <br>可是表单验证却失效,即未填用户名便提交, <br>this.addFieldError("userIdError", this.getText("user.userIdRequired")); <br>可是页面中便不显示出错信息。若把theme="simple"去掉,验证便有效。 <br>请问楼主如何使两者都有效。

 

很奇怪,我加了theme="simple"还是行的啊,而且我的代码里是
# if (getUsername() == null || getUsername().trim().equals("")) {  
#             //返回错误信息键值,user.required包含具体内容见messageResource.properties  
#             addFieldError("username", getText("user.required"));  
#         }  
#         if (getPassword() == null || getPassword().trim().equals("")) {  
#             //返回错误信息键值,pass.required包含具体内容见messageResource.properties  
#             addFieldError("password", getText("pass.required"));  
#         }  

哪里有你说的“this.addFieldError("userIdError", this.getText("user.userIdRequired"));”?


那是我自己的代码,不是你原来的。我只是就问题而讨论问题,并非代码而讨论问题。

我的问题是要么出现验证错误信息(未加theme="simple")而布局很乱;要么是加上(theme="simple")后,布局没问题,但验证错误信息没有。

呵呵,好说。我以为是我代码的问题呢。我有时间给你看一下。然后站内短信你吧。
6 楼 zhangyuqing052 2009-10-26  
<p>JSP代码:</p>
<pre name="code" class="java">&lt;s:form action="login" method="post" theme="simple"&gt;
&lt;table align="center" width="280"&gt;
&lt;tr&gt;
&lt;td align="right" width="80"&gt;&lt;s:text name="user.userId" /&gt;:&lt;/td&gt;
&lt;td align="center" width="100"&gt;
&lt;s:textfield name="userId" size="20" /&gt;&lt;/td&gt;
&lt;td width="100"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;s:text name="user.password" /&gt;:&lt;/td&gt;
&lt;td align="center"&gt;&lt;s:password name="password" size="21" /&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;/td&gt;
&lt;td align="center"&gt;
&lt;s:submit value="Login" /&gt;&amp;nbsp;&amp;nbsp;
&lt;s:a href="Jsp/register.jsp"&gt;
&lt;s:text name="register" /&gt;
&lt;/s:a&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/s:form&gt;</pre>
<p> Java Action中的validate()验证方法:</p>
<p>public void validate() {</p>
<p>  if(getUserId() == null || "".equals(getUserId())) {<br>   this.addFieldError("userId", this.getText("user.userIdRequired"));<br>  }<br>  <br>  if(getPassword() == null || "".equals(getPassword())) {<br>   this.addFieldError("password", this.getText("user.passwordRequired"));<br>  }<br> }</p>
<p> </p>
<p>resourceMsgs.properties属性文件中的配置:</p>
<pre name="code" class="java">user.userIdRequired = UserID not null!
user.passwordRequired = Password not null!</pre>
<p> </p>
5 楼 zhangyuqing052 2009-10-26  
黑暗浪子 写道
zhangyuqing052 写道
应想将页面控件布局,顾 <br><s:form action="login" method="post" <span style="color: #ff0000;">theme="simple"</span>> <br>采用此方式; <br>可是表单验证却失效,即未填用户名便提交, <br>this.addFieldError("userIdError", this.getText("user.userIdRequired")); <br>可是页面中便不显示出错信息。若把theme="simple"去掉,验证便有效。 <br>请问楼主如何使两者都有效。

 

很奇怪,我加了theme="simple"还是行的啊,而且我的代码里是
# if (getUsername() == null || getUsername().trim().equals("")) {  
#             //返回错误信息键值,user.required包含具体内容见messageResource.properties  
#             addFieldError("username", getText("user.required"));  
#         }  
#         if (getPassword() == null || getPassword().trim().equals("")) {  
#             //返回错误信息键值,pass.required包含具体内容见messageResource.properties  
#             addFieldError("password", getText("pass.required"));  
#         }  

哪里有你说的“this.addFieldError("userIdError", this.getText("user.userIdRequired"));”?


那是我自己的代码,不是你原来的。我只是就问题而讨论问题,并非代码而讨论问题。

我的问题是要么出现验证错误信息(未加theme="simple")而布局很乱;要么是加上(theme="simple")后,布局没问题,但验证错误信息没有。
4 楼 黑暗浪子 2009-10-24  
zhangyuqing052 写道
应想将页面控件布局,顾 <br><s:form action="login" method="post" <span style="color: #ff0000;">theme="simple"</span>> <br>采用此方式; <br>可是表单验证却失效,即未填用户名便提交, <br>this.addFieldError("userIdError", this.getText("user.userIdRequired")); <br>可是页面中便不显示出错信息。若把theme="simple"去掉,验证便有效。 <br>请问楼主如何使两者都有效。

 

很奇怪,我加了theme="simple"还是行的啊,而且我的代码里是
# if (getUsername() == null || getUsername().trim().equals("")) {  
#             //返回错误信息键值,user.required包含具体内容见messageResource.properties  
#             addFieldError("username", getText("user.required"));  
#         }  
#         if (getPassword() == null || getPassword().trim().equals("")) {  
#             //返回错误信息键值,pass.required包含具体内容见messageResource.properties  
#             addFieldError("password", getText("pass.required"));  
#         }  

哪里有你说的“this.addFieldError("userIdError", this.getText("user.userIdRequired"));”?
3 楼 zhangyuqing052 2009-10-23  
<p>应想将页面控件布局,顾 <br>&lt;s:form action="login" method="post" <span style="color: #ff0000;">theme="simple"</span>&gt; <br>采用此方式; <br>可是表单验证却失效,即未填用户名便提交, <br>this.addFieldError("userIdError", this.getText("user.userIdRequired")); <br>可是页面中便不显示出错信息。若把theme="simple"去掉,验证便有效。 <br>请问楼主如何使两者都有效。</p>
<p> </p>
2 楼 TheMatrix 2009-10-23  
支持你!~
1 楼 jiabao523527 2009-10-23  
留名,支持!

相关推荐

    struts2讲义 struts2讲义struts2讲义struts2讲义struts2讲义

    ### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的发展历程**: - Struts最初版本发布于2000年,是Java Web开发领域的一个重要里程碑。 - 随着时间的发展和技术的进步,Struts逐渐暴露...

    struts2讲义

    ### Struts2框架入门知识点详解 #### 一、Struts2框架概述 ##### 1.1 Struts2简介 Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,用于简化Java Web应用程序的开发过程。与传统的Java Web...

    struts2讲义,讲解struts2的框架

    在本讲义中,我们将深入探讨Struts2的基本概念、依赖的库、启动配置以及配置文件。 首先,开发Struts2应用需要依赖一些核心的JAR文件。这些文件包括: 1. `struts2-core-2.x.x.jar`:这是Struts2框架的核心库,...

    struts2讲义-详解

    本讲义将详细介绍Struts2的核心概念、工作原理以及如何在实际项目中应用。 一、Struts2简介 Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,旨在解决Struts1在可扩展性和灵活性上的不足。Struts2提供...

    struts2讲义 DOC版

    struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义

    原创struts2讲义2.pdf

    ### Struts2框架详解 #### 一、Struts2框架介绍与概述 ##### 1.1 Struts2框架概述 Struts2是一个基于MVC(Model-View-Controller)模式的开源Java Web应用框架,它提供了强大的功能来帮助开发者构建灵活、可扩展...

    《Struts2讲义》吴峻申【电子书】

    第2章 Web基础技术简介第3章 Struts2核心技术第4章 另一Struts2核心技术:拦截器第5章 Struts2标签库第6章 Struts2非JSP视图技术第7章 Struts2类型转换技术第8章 Struts2输入校验第9章 Struts2国际化第10章 Struts2...

    Struts2讲义(Word文档格式)

    本讲义详细介绍了Struts2框架的各个方面,帮助开发者从基础到进阶全面掌握其用法。 1. **Struts2概述** Struts2是Apache软件基金会的开源项目,它继承了Struts1的优点并解决了其局限性,提供了更优秀的行动控制器...

    struts2 教程 讲义.(pdf)

    4. **拦截器(Interceptor)**:拦截器是Struts2的核心特性之一,它们按顺序执行,可以在请求到达Action之前或之后执行额外的操作,如日志记录、权限检查、数据校验等。常见的拦截器有Validation拦截器(负责数据...

    struts2讲义.doc

    ### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的演变**:从Struts1到Struts2,框架经历了从MVC(Model-View-Controller)架构的经典实践到更为灵活、强大的迭代升级。 - **Struts2的...

    struts2讲义,解析

    4. **拦截器(Interceptor)**:Struts2的一个强大特性是拦截器,它们是处理请求的中间件,可以在Action执行前后执行额外的任务,如日志记录、事务管理、权限检查等。 5. **结果类型(Result)**:Action执行后,...

    Struts2讲义1

    Struts2讲义1 Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web开发框架,由Apache软件基金会维护。它继承了Struts1的优点,并结合了WebWork框架的功能,提供了更强大的控制层解决方案。Struts2的...

    西安野马计算机培训学校STRUTS2讲义

    西安野马计算机培训学校的STRUTS2讲义,可能涵盖了这一框架的基础知识和高级特性,帮助学员理解和掌握Struts2的核心概念。 首先,Struts2的基础部分可能包括以下几个方面: 1. **架构原理**:讲解Struts2的MVC设计...

    struts2讲义_吴峻申

    Struts2讲义 作者:吴峻申 目录 第1章 Struts过时了吗? 10 1.1 Struts历史发展过程 10 1.2 Struts2的“简历” 13 1.2.1 标签库介绍 13 1.2.2 拦截器应用目的 14 1.2.3 FilterDispatcher和Action概述 14 1.2.4 ...

Global site tag (gtag.js) - Google Analytics