先贴个本帖的地址,以免被爬:struts2教程 官方系列六:表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html

下载本章节代码

介绍

在本教程中,我们将探索使用Struts2来验证用户在表单上的输入。有两种方法可以来进行表单验证。本教程将介绍更基本的方法,在Struts2 Action类中包含验证。

为了使Struts2 Action类在Struts2 表单中验证用户的输入,您必须在Action类中定义一个validate方法。假设我们有这些业务规则:

  1.用户必须提供第一个名称用户

  2.必须提供一个电子邮件地址用户

  3.未到18岁不能注册

添加如下代码到/src/action/RegisterAction.java中

validate method

public void validate(){
if (personBean.getFirstName().length() == 0) {
addFieldError("personBean.firstName", "First name is required.");
} if (personBean.getEmail().length() == 0) {
addFieldError("personBean.email", "Email is required.");
} if (personBean.getAge() < 18) {
addFieldError("personBean.age", "Age is required and must be 18 or older");
}
}

当用户在register表单上按下提交按钮时,Struts2将把用户的输入传递给personBean的实例字段。然后Struts 2将自动执行validate 方法。如果if判断条件为true,那么Struts2将调用它的addFieldError方法(继承自ActionSupport类)。

如果验证失败,那么Struts2就不会继续调用execute方法了。相反,Struts2 将返回“input”作为该操作的结果。(常用结果的还有success、error)

处理 "Input" 结果

那么,如果Struts2返回“input”表示用户的表单输入无效,那么接下来该怎么办呢?在大多数情况下,我们将希望重新显示具有表单的web页面,并将错误消息包含在表单中,以告知用户。

为了处理"input" 结果,我们需要在struts.xml添加配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="basicstruts2" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<!--hello->
<action name="hello" class="action.HelloWorldAction" method="execute">
<result name="success">/HelloWorld.jsp</result>
</action> <!-- register -->
<action name="register" class="action.RegisterAction" method="execute">
<result name="success">/thankyou.jsp</result>
<result name="input">/register.jsp</result>
</action>
</package> </struts>

因此,当验证失败,Struts2 返回"input"结果时,Struts2 将重新显示register.jsp。由于我们使用了Struts2 的表单标签,因此Struts2将自动的添加错误消息。这些错误消息是我们在addFieldError方法调用中指定的。addFieldError方法有两个参数。第一个是错误字段的表单字段名,第二个是在表单字段上方显示的错误消息

addFieldError("personBean.firstName", "First name is required.")

将会在表单上的firstName字段上面显示"First name is required."

运行

添加css

Struts2 的<s:head/>标签可用于对错误消息添加CSS,这个标签要放在HTML的<head>标签中,重新运行:

总结

本教程通过向Action类添加验证方法来验证用户的表单输入。还有一种更复杂的方法可以使用XML验证用户输入。如果您想了解关于在Struts 2中使用XML进行验证的更多信息,请参阅验证Validation

在我们的下一个教程中,我们将使用消息资源文件将文本从视图页面中分离出来。

struts2官方 中文教程 系列六:表单验证的更多相关文章

  1. struts2官方 中文教程 系列十一:使用XML进行表单验证

    在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...

  2. struts2官方 中文教程 系列十四:主题Theme

    介绍 当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...

  3. struts2官方 中文教程 系列十:Form标签

    介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, f ...

  4. struts2官方 中文教程 系列七:消息资源文件

    介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...

  5. struts2官方 中文教程 系列九:Debugging Struts

    介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截 ...

  6. struts2官方 中文教程 系列十三:利用通配符选择方法

    介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...

  7. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  8. struts2官方 中文教程 系列八:异常处理

    在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴 ...

  9. struts2官方 中文教程 系列五:处理表单

    先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列五:处理表单  即 http://www.cnblogs.com/linghaoxinpian/p/6906298.html 下载本章 ...

随机推荐

  1. 一点一点学写Makefile(6)-遍历当前目录源文件及其子目录下源文件

    时候,我们在开发的时候需要将本次工程的代码分成多个子目录来编写,但是在Makefile的编写上却是个问题,下面我就教大家怎么构建带有子文件夹的源代码目录的自动扫描编译 下面这张图是我的文件树 这里面s ...

  2. luogu P2424 约数和

    嘟嘟嘟 求出[L, R]中每一个数的约数再相加必定会超时,所以换一种思路:枚举约数d. 对于一个约数d,能整除他的数可以写成k * d, (1 <= k <= ⌊n / d⌋),因此约数d ...

  3. 未启用当前数据库的 SQL Server Service Broker,请为此数据库启用 Service Broker

    ALTER DATABASE DATABASE_Name SET NEW_BROKER WITH ROLLBACK IMMEDIATE; ALTER DATABASE DATABASE_Name SE ...

  4. ssh公钥

    想要将本地电脑的文件传到github上,必须要通过建立本地电脑与github帐号的ssh公钥才行. 方式: 用命令ssh-keygen产生ssh公钥(之后一直按回车就好),然后cd到~/.ssh目录, ...

  5. 记安卓appium自动化测试实践

    一.软件安装 1. 安装node.js,安装路径D:\Program Files\nodejs\ 可以在官网下载https://nodejs.org/zh-cn/download/,版本号为node- ...

  6. context.RewritePath

    context.RewritePath原理修改HttpRequest类中的Path属性

  7. 【luogu P3627 [APIO2009]抢掠计划】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3627 把点权转化到边权上去. #include <stack> #include <que ...

  8. 【luogu P2169 正则表达式】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2169 tarjan缩点 + SPFA 缩完点之后加边注意别写错. 也可以不用建两个图,可以在一张图上判断是否 ...

  9. 【luogu P3369 【模板】普通平衡树(Treap/SBT)】 模板 Scapegoat Tree

    #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...

  10. JavaScript的原型(prototype、__proto__、constructor)

    构造函数:function Foo() {}; 实例对象: let f1 = new Foo; let o1 = new Foo; 一般函数都有prototype属性,除了window.Math和Fu ...