- Struts 2 教程
- Struts2 - 主页
- Struts2 - 基本 MVC 架构
- Struts2 - 概述
- Struts2 - 环境设置
- Struts2 - 架构
- Struts2 - 示例
- Struts2 - 配置
- Struts2 - 动作
- Struts2 - 拦截器
- Struts2 - 结果类型
- Struts2 - 价值堆栈/OGNL
- Struts2 - 文件上传
- Struts2 - 数据库访问
- Struts2 - 发送电子邮件
- Struts2 - 验证
- Struts2 - 本地化
- Struts2 - 类型转换
- Struts2 - 主题/模板
- Struts2 - 异常处理
- Struts2 - 注释
- Struts 2 集成
- Struts2-Spring
- Struts2 - 瓷砖
- Struts2-Hibernate
- Struts 2 有用资源
- Struts2 - 问题与解答
- Struts2 - 快速指南
- Struts2 - 有用的资源
- Struts2 - 讨论
Struts 2 - 验证框架
在本章中,我们将更深入地研究 Struts 验证框架。在Struts核心,我们有验证框架,可以帮助应用程序在执行action方法之前运行规则来执行验证。
客户端验证通常使用 Javascript 来实现。但是,不应仅依赖客户端验证。最佳实践建议应在应用程序框架的各个级别引入验证。现在让我们看看向 Struts 项目添加验证的两种方法。
在这里,我们将举一个应该使用简单页面捕获其姓名和年龄的员工示例,我们将进行这两个验证以确保用户始终输入的姓名和年龄应在 28 到 28 之间的范围内65.
让我们从示例的主 JSP 页面开始。
创建主页
让我们编写主页JSP文件index.jsp,它将用于收集上面提到的员工相关信息。
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Employee Form</title>
</head>
<body>
<s:form action = "empinfo" method = "post">
<s:textfield name = "name" label = "Name" size = "20" />
<s:textfield name = "age" label = "Age" size = "20" />
<s:submit name = "submit" label = "Submit" align="center" />
</s:form>
</body>
</html>
index.jsp 使用了 Struts 标签,我们还没有讨论过,但我们将在标签相关章节中研究它们。但现在,假设 s:textfield 标记打印输入字段,而 s:submit 打印提交按钮。我们为每个标签使用了 label 属性,它为每个标签创建标签。
创建视图
我们将使用 JSP 文件 success.jsp,如果定义的操作返回 SUCCESS,将调用该文件。
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Success</title>
</head>
<body>
Employee Information is captured successfully.
</body>
</html>
创建动作
因此,让我们定义一个小操作类Employee,然后在Employee.java文件中添加一个名为validate()的方法,如下所示。确保您的操作类扩展了ActionSupport类,否则您的 validate 方法将不会被执行。
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Employee extends ActionSupport {
private String name;
private int age;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void validate() {
if (name == null || name.trim().equals("")) {
addFieldError("name","The name is required");
}
if (age < 28 || age > 65) {
addFieldError("age","Age must be in between 28 and 65");
}
}
}
如上例所示,验证方法检查“Name”字段是否有值。如果未提供任何值,我们会为“名称”字段添加字段错误以及自定义错误消息。其次,我们检查“年龄”字段的输入值是否在 28 到 65 之间,如果不满足此条件,我们会在已验证字段上方添加错误。
配置文件
最后,让我们使用struts.xml配置文件将所有内容组合在一起,如下所示 -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "empinfo"
class = "com.tutorialspoint.struts2.Employee"
method = "execute">
<result name = "input">/index.jsp</result>
<result name = "success">/success.jsp</result>
</action>
</package>
</struts>
以下是web.xml文件的内容-
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
现在,右键单击项目名称,然后单击“导出”>“WAR 文件”以创建一个 War 文件。然后将此 WAR 部署到 Tomcat 的 webapps 目录中。最后,启动 Tomcat 服务器并尝试访问 URL http://localhost:8080/HelloWorldStruts2/index.jsp。这将产生以下屏幕 -
现在不要输入任何必需的信息,只需单击“提交”按钮即可。您将看到以下结果 -
输入所需信息,但在“发件人”字段中输入错误,假设姓名为“test”,年龄为 30,最后单击“提交”按钮。您将看到以下结果 -
此验证如何进行?
当用户按下提交按钮时,Struts 2 将自动执行 validate 方法,如果该方法中列出的任何“if”语句为 true,Struts 2 将调用其 addFieldError 方法。如果添加了任何错误,那么 Struts 2 将不会继续调用execute 方法。相反,Struts 2 框架将返回输入作为调用操作的结果。
因此,当验证失败且 Struts 2 返回input时,Struts 2 框架将重新显示 index.jsp 文件。由于我们使用了 Struts 2 表单标签,Struts 2 会自动将错误消息添加到表单字段的上方。
这些错误消息是我们在 addFieldError 方法调用中指定的消息。addFieldError 方法有两个参数。第一个是错误适用的表单字段名称,第二个是要在该表单字段上方显示的错误消息。
addFieldError("name","The name is required");
为了处理输入的返回值,我们需要将以下结果添加到struts.xml中的操作节点。
<result name = "input">/index.jsp</result>
基于 XML 的验证
进行验证的第二种方法是在操作类旁边放置一个 xml 文件。基于 Struts2 XML 的验证提供了更多的验证选项,如电子邮件验证、整数范围验证、表单验证字段、表达式验证、正则表达式验证、必需验证、必需字符串验证、字符串长度验证等。
xml 文件需要命名为'[action-class]'-validation.xml。因此,在我们的例子中,我们创建一个名为Employee-validation.xml的文件,其中包含以下内容 -
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name = "name">
<field-validator type = "required">
<message>
The name is required.
</message>
</field-validator>
</field>
<field name = "age">
<field-validator type = "int">
<param name = "min">29</param>
<param name = "max">64</param>
<message>
Age must be in between 28 and 65
</message>
</field-validator>
</field>
</validators>
理想情况下,上述 XML 文件应与类文件一起保存在您的 CLASSPATH 中。让我们的 Employee 操作类如下,没有validate()方法 -
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Employee extends ActionSupport{
private String name;
private int age;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
其余的设置将保持与前面的示例相同,现在如果您运行该应用程序,它将产生与我们在前面的示例中收到的相同的结果。
使用 xml 文件来存储配置的优点是可以将验证与应用程序代码分开。您可以让开发人员编写代码,让业务分析师创建验证 xml 文件。另一件需要注意的事情是默认可用的验证器类型。
Struts 默认带有更多验证器。常见的验证器包括日期验证器、正则表达式验证器和字符串长度验证器。检查以下链接以了解更多基于 Struts-XML 的验证器的详细信息。