当前位置:首页 » struts2在线教程 » Struts2验证框架

Struts2验证框架

Struts2验证框架实例代码和在线教程。

现在,我们将研究如何Struts的验证框架。在Struts的核心,我们的验证框架,用于帮助应用运行规则的操作方法执行之前执行验证。
客户端验证通常是使用JavaScript来实现。但是人们不应该依赖客户端的验证孤单。最佳实践表明,在所有的应用程序框架,应该引入验证。现在让我们来看看两种方式添加验证我们的Struts项目。
在这里,我们将采取一个例子,雇员的姓名和年龄将被捕获使用一个简单的页面,我们把两个验证,以确保总是进入一个姓名和年龄应在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打印一个提交按钮。我们使用的标签属性标签,每个标签每个标签创建。

创建视图:

我们将使用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>

创建动作-Action:

因此,让我们定义一个小小的动作,Employee类,然后添加一个方法,称为validate(),如下所示Employee.java文件。请确保您的操作类扩展了ActionSupport类,否则您的验证方法将不被执行。

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'字段具有一个值,或不是。如果未指定值,“Name”字段中添加一个字段错误自定义错误消息。其次,我们检查的“Age”字段输入的值是在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。这会给你以下画面:

现在不输入任何所需的信息,只需点击submit按钮。你会看到下面的结果:

输入所需的信息,但From字段输入了错误,让我们测试名字为 "test" 而年龄为:30, 最后点击“提交”按钮。你会看到下面的结果:

此验证是如何工作的?

当用户按下“提交”按钮,在Struts 2会自动执行的验证方法,如果任何一个if语句内列出的方法是true,Struts 2中调用它的addFieldError方法。如果有任何错误已加入Struts 2中不会进行调用execute方法。而Struts 2框架将返回输入调用动作的结果。
因此,在验证失败时和Struts2返回输入,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验证的验证提供了更多的选择,如电子邮件验证,验证整数范围,形式验证领域,则表达式验证,正则表达式验证,必要的验证,requiredstring验证,stringlength验证等。

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的理想与类文件一起。我们有我们的员工action类中没有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验证器