struts2官方 中文教程 系列六:表单验证

先贴个本帖的地址,以免被爬: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

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

转载于:https://www.cnblogs.com/linghaoxinpian/p/6906720.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Alictf 2015决赛题目设计和解题思路

解题思路&#xff1a; https://weibo.com/p/1001603836186467681086 设计题目&#xff1a; http://www.cnblogs.com/qsjmobilesec/p/4456090.html

【转载】 华为荣耀手机如何进入开发者模式

针对手机APP开发人员来说&#xff0c;很多时候开发手机APP应用的时候&#xff0c;需要进入手机的开发者模式中对程序进行调试等操作&#xff0c;此文将介绍华为荣耀手机如何进入开发者模式&#xff0c;以华为荣耀V9手机为例&#xff0c;华为荣耀V10、荣耀V20、华为P20、华为P30…

c++ dll 类使用_在.Net Core 中使用钩子

目录前言什么是钩子使用钩子3. 挂载多个钩子4. 在钩子中加载额外的程序集5. 在 Asp.Net Web Api 项目中使用钩子结束语演示代码下载前言Host startup hook&#xff0c;是2.2中提供的一项新的功能&#xff0c;通过使用主机启动钩子&#xff0c;允许开发人员在不修改代码的情况下…

3c技能和背包需要改建吗?_认为您需要仪表板? 您应该改建一个笔记本。

3c技能和背包需要改建吗?by Mahdi Karabiben通过Mahdi Karabiben 认为您需要仪表板&#xff1f; 您应该改建一个笔记本。 (Think you need a Dashboard? You should build a Notebook instead.) After first establishing themselves as a key component of the standard Bu…

leetcode 147. 对链表进行插入排序

对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始&#xff0c;该链表可以被认为已经部分排序&#xff08;用黑色表示&#xff09;。 每次迭代时&#xff0c;从输入数据中移除一个元素&#xff08;用红色表示&#xff09;&#xff0c;并原地将其插入到已排好序的…

JSP过滤器Filter配置过滤类型汇总

一、配置方法1 映射过滤应用程序中所有资源<filter> <filter-name>loggerfilter</filter-name> <filter-class>myfilter.LoggerFilter</filter-class></filter><filter-mapping> <filter-name>loggerfilter</filt…

ERP流程入门_从会计分录理解企业基本流程[转]

ERP流程入门_从会计分录理解企业基本流程 本贴写给尚未在企业工作过的朋友&#xff01;了解企业的基本流程的一个方法是看它的会计分录,我们现在来看一个完整的企业基本流程&#xff0c;它的会计分录是如何做的&#xff0c;其中有些帐户名称可能不一样&#xff0c;不过没关系&a…

萨默尔机器人_助力产业发展 西安市人工智能机器人学会正式成立

8月23日&#xff0c;西安市人工智能机器人学会在西咸新区沣东新城协同创新港正式成立。西安报业全媒体记者 冯炜 摄8月23日&#xff0c;西安市人工智能机器人学会正式成立。学会将通过市场化机制、社会化服务等方式&#xff0c;整合科技创新资源和人才培养资源&#xff0c;促进…

粒度过粗_这些书帮助我度过了第一次成为技术主管的经历

粒度过粗by Danny Perez丹尼佩雷斯(Danny Perez) 这些书帮助我度过了第一次成为技术主管的经历 (These books helped me navigate my first time being a tech lead) The tech lead was moving to another team for a long-term assignment, and I took over as the engineeri…

随便说说:在ASP.NET应用程序中上传文件

在Web程序中上传文件是很常见的需求。利用HTTP协议上传文件的方式非常有限&#xff0c;最常见的莫过于使用<input type"file" />元素进行上传。这种上传方式会将内容使用multipart/form-data方案进行编码&#xff0c;并将内容POST到服务器端。使用multipart/fo…

leetcode 148. 排序链表(归并排序)

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 进阶&#xff1a; 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下&#xff0c;对链表进行排序吗&#xff1f; 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1…

理论与哲学就是梳理无限感性经验和知性知识的工具

理论与哲学就是梳理无限感性经验和知性知识的工具&#xff0c; 是因为人脑的特性&#xff0c;或者说人脑功能的局限性而被人创造出来的思想工具。 工具服务于实践&#xff0c;并被实践所检验&#xff08;描述、解释、预见&#xff09;。 工具一旦创建就有其客观性&#xff0c;但…

记一次调用API遇到的问题

调用sonar API 接口&#xff0c;地址如下&#xff1a; http://sonar.*****.com/api/measures/search_history?componenttcmp-devops-service&metricssqale_index%2Cduplicated_lines_density%2Cncloc%2Ccoverage%2Cbugs%2Ccode_smells%2Cvulnerabilities&ps1000 url上…

h5滚动隐藏滚动条_这 10 个值得开启的隐藏功能,让你的 Chrome 释放更多潜力

上次分享了让 Chrome 浏览器用得更顺手的地址栏命令&#xff0c;跟大家整理和介绍了多个 Chrome 地址栏命令&#xff0c;利用好这些命令工具能够提升浏览器配置效率&#xff0c;让你的 Chrome 浏览器用得更顺手。这次介绍的是 Chrome 内置的实验功能&#xff0c;它被单独放在了…

redux ngrx_另一个减少Redux(NGRX)应用程序样板的指南

redux ngrxby Andrey Goncharov通过安德烈贡恰洛夫(Andrey Goncharov) 另一个减少Redux(NGRX)应用程序样板的指南 (Yet another guide to reduce boilerplate in your Redux (NGRX) app) 我们在这里要覆盖什么&#xff1f; (What are we gonna cover here?) In this article,…

leetcode 242. 有效的字母异位词

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输入: s “rat”, t “car” 输出: false 代码 class Solution {public boolean isAnagram(String s, String t) {…

技巧:使用User Control做HTML生成

User Control大家肯定不会陌生&#xff0c;在使用ASP.NET的过程中&#xff0c;除了aspx页面&#xff0c;最常见的就莫过于ascx了。ascx是一个有独立逻辑的组件&#xff0c;提供了强大的复用特性&#xff0c;合理使用&#xff0c;能够大大提高开发效率。通过User Control直接生成…

Spring Boot干货系列:(二)配置文件解析

前言 上一篇介绍了Spring Boot的入门&#xff0c;知道了Spring Boot使用“习惯优于配置”&#xff08;项目中存在大量的配置&#xff0c;此外还内置了一个习惯性的配置&#xff0c;让你无需手动进行配置&#xff09;的理念让你的项目快速运行起来。所以&#xff0c;我们要想把S…

mysql常用操作记录

&#xff08;1&#xff09;判断表中一个字段是空&#xff0c;可为&#xff1a;字段名 IS NULL&#xff08;2&#xff09;类似oracle的decode作用&#xff1a;IF(字段名>0,字段名,0)&#xff08;3&#xff09;时间格式&#xff08;年-月-日&#xff09;&#xff1a;DATE_FORM…

小爱音响调用php接口_阿里API调用二(PHP)

接口地址拼合成功后&#xff0c;用curl函数post获取阿里返回的完整数据&#xff0c;将地址传入getContent()方法中&#xff0c;绝对能获取用户数据。public function getContent($url){$ch curl_init();// 初始化curl_setopt($ch,CURLOPT_URL,$apiprourlall);curl_setopt($ch,…