- 浏览: 503089 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
huyuran:
...
CheckStyle使用手册 -
三剑客二无名:
楼主给力。成功完成tomcat部署打包,上来只是为了评论一下。 ...
maven自动部署war包到tomcat -
yx09167415:
盛大在为的印象中多么的伟岸。我投了几次。机会都不给。,。。。祝 ...
盛大面试经历 -
kunsyliu:
楼主给力。成功完成tomcat部署打包
maven自动部署war包到tomcat -
MrLee23:
哎,中枪了。。。
坏公司鉴别方法
使用ActionSupport进行校验
如果From数据操作有误,比如输入不是我们需要的数据,又或者没有输入等输入原因。Action实例执行execute方法前会使用校验来进行控制。本节就是介绍如何在Struts2中实现校验功能。
技术要点
本节代码中还是使用登录功能作为示例
演示代码
登录JSP代码:
图4.1 登录初始页面
不输入直接登录显出出错页面如图4.2所示。
图4.2 错误提示页面
输入数据页面如图4.3所示。
图4.3 输入数据页面
登录成功JSP代码:
图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标签本身已具备显示校验错误的能力。
很奇怪,我加了theme="simple"还是行的啊,而且我的代码里是
哪里有你说的“this.addFieldError("userIdError", this.getText("user.userIdRequired"));”?
那是我自己的代码,不是你原来的。我只是就问题而讨论问题,并非代码而讨论问题。
我的问题是要么出现验证错误信息(未加theme="simple")而布局很乱;要么是加上(theme="simple")后,布局没问题,但验证错误信息没有。
呵呵,好说。我以为是我代码的问题呢。我有时间给你看一下。然后站内短信你吧。
很奇怪,我加了theme="simple"还是行的啊,而且我的代码里是
哪里有你说的“this.addFieldError("userIdError", this.getText("user.userIdRequired"));”?
那是我自己的代码,不是你原来的。我只是就问题而讨论问题,并非代码而讨论问题。
我的问题是要么出现验证错误信息(未加theme="simple")而布局很乱;要么是加上(theme="simple")后,布局没问题,但验证错误信息没有。
很奇怪,我加了theme="simple"还是行的啊,而且我的代码里是
哪里有你说的“this.addFieldError("userIdError", this.getText("user.userIdRequired"));”?
如果From数据操作有误,比如输入不是我们需要的数据,又或者没有输入等输入原因。Action实例执行execute方法前会使用校验来进行控制。本节就是介绍如何在Struts2中实现校验功能。
技术要点
本节代码中还是使用登录功能作为示例
Action类中ActionSupport使用以及validate方法重写实现。
属性文件messageResource.properties定义以及JSP页面上错误信息如何显示。
导航结果页面演示。
属性文件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标签本身已具备显示校验错误的能力。
评论
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"><s:form action="login" method="post" theme="simple">
<table align="center" width="280">
<tr>
<td align="right" width="80"><s:text name="user.userId" />:</td>
<td align="center" width="100">
<s:textfield name="userId" size="20" /></td>
<td width="100"></td>
</tr>
<tr>
<td align="right"><s:text name="user.password" />:</td>
<td align="center"><s:password name="password" size="21" /></td>
<td></td>
</tr>
<tr>
<td align="right"></td>
<td align="center">
<s:submit value="Login" />&nbsp;&nbsp;
<s:a href="Jsp/register.jsp">
<s:text name="register" />
</s:a>
</td>
<td></td>
</tr>
</table>
</s:form></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>
<pre name="code" class="java"><s:form action="login" method="post" theme="simple">
<table align="center" width="280">
<tr>
<td align="right" width="80"><s:text name="user.userId" />:</td>
<td align="center" width="100">
<s:textfield name="userId" size="20" /></td>
<td width="100"></td>
</tr>
<tr>
<td align="right"><s:text name="user.password" />:</td>
<td align="center"><s:password name="password" size="21" /></td>
<td></td>
</tr>
<tr>
<td align="right"></td>
<td align="center">
<s:submit value="Login" />&nbsp;&nbsp;
<s:a href="Jsp/register.jsp">
<s:text name="register" />
</s:a>
</td>
<td></td>
</tr>
</table>
</s:form></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><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>请问楼主如何使两者都有效。</p>
<p> </p>
<p> </p>
2 楼
TheMatrix
2009-10-23
支持你!~
1 楼
jiabao523527
2009-10-23
留名,支持!
发表评论
-
struts2讲义每章节代码包汇总
2009-11-12 20:57 8255不知道javaeye一个blog允许上传多大的附件。 先试试 ... -
放出完整的Struts2讲义
2009-11-06 08:17 15238谢谢各位长期以来的支持~ -
Struts2讲义46
2009-11-05 08:46 253310.2.2 <decorator:use ... -
Struts2讲义45
2009-11-04 09:40 180610.2 sitemesh 高级应用 在 ... -
Struts2讲义44
2009-11-03 08:26 1822第10 章 Struts2 页面布局实现 ... -
Struts2讲义43
2009-11-02 13:21 22919.3 用户主动选择国 ... -
Struts2讲义42
2009-11-01 02:05 15419.2.3 Struts2 临时范围属性文件国 ... -
Struts2讲义41
2009-10-31 11:36 14629.2.2 Struts2Action 范围属 ... -
Struts2讲义40
2009-10-30 00:16 15929.2 Struts2 国际化使用范围说明 ... -
Struts2讲义39
2009-10-29 10:44 17649.1.2 占位符国际化使用 ... -
Struts2讲义38
2009-10-28 08:56 2096第9 章 Struts2 国际化 在第 ... -
Struts2讲义37
2009-10-27 15:23 18448.4 Struts2 输入校验器大全 在 ... -
Struts2讲义36
2009-10-26 11:15 15918.3 集合类型输入校验介绍 于之前类 ... -
Struts2讲义35
2009-10-25 14:21 13118.2 利用配置文件进行输入校验方法说明 ... -
Struts2讲义34
2009-10-24 01:47 1791第8 章 Struts2 输入校验 ... -
Struts2讲义33
2009-10-23 08:37 16177.2 类型转换发生异常处理方案 类型 ... -
Struts2讲义32
2009-10-22 13:19 19397.1.3 Set 集合类型数据类型转换功能 ... -
Struts2讲义31
2009-10-21 08:14 17867.1.2 List 集合类型数据类型转换功能 ... -
Struts2讲义30
2009-10-20 09:11 1759第7 章 Struts2 类型转换技术 ... -
Struts2讲义29
2009-10-19 08:33 18166.3 JasperReports 报表视图技术使 ...
相关推荐
一个很好的关于Struts2的讲义!struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义
struts2入门讲义
struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义
针对Struts2的具体技术细节进行了详细附例的说明。
传智博客的struts2的讲义,ppt格式,很好的东西。
Struts2讲义
学习struts2的最好帮手,内容细致,讲解透彻
比较全面的struts2的讲解,javaeye上也有帖子,相当不错。个人建议新手看看
第2章 Web基础技术简介第3章 Struts2核心技术第4章 另一Struts2核心技术:拦截器第5章 Struts2标签库第6章 Struts2非JSP视图技术第7章 Struts2类型转换技术第8章 Struts2输入校验第9章 Struts2国际化第10章 Struts2...
struts2讲义.doc
很不错的struts2 教程 讲义.(pdf)
struts2讲义内容详细,分类多 struts2讲义内容详细,分类多
struts2讲义,全面的解释了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 ...
Struts培训讲义Struts培训讲义Struts培训讲义
传智2016框架视频配套讲义----struts2_day04讲义.pdf ,需要的下载了
西安野马计算机培训学校STRUTS2讲义,共2个章节
黑暗浪子写的struts2讲义,很全面、细致。