📜  Struts 2-验证框架

📅  最后修改于: 2020-11-11 05:01:18             🧑  作者: Mango


在本章中,我们将更深入地研究Struts验证框架。在Struts核心,我们具有验证框架,该框架可帮助应用程序在执行action方法之前运行规则以执行验证。

客户端验证通常是使用Javascript实现的。但是,不应仅依赖客户端验证。最佳实践建议应在应用程序框架的所有级别上引入验证。现在,让我们看一下向Struts项目添加验证的两种方法。

在这里,我们以一个雇员的示例为例,该雇员的姓名和年龄应该使用一个简单的页面捕获,并且我们将进行两次验证,以确保用户输入的姓名和年龄始终在28到200之间。 65。

让我们从示例的主要JSP页面开始。

创建主页

让我们编写主页JSP文件index.jsp ,该文件将用于收集上述的Employee相关信息。

Employee Form
   

   
      

index.jsp使用了Struts标记,我们尚未介绍它,但是我们将在与标记相关的章节中进行研究。但是现在,仅假设s:textfield标签打印一个输入字段,而s:submit打印一个提交按钮。我们为每个标签使用了label属性,从而为每个标签创建标签。

创建视图

我们将使用JSP文件success.jsp,如果定义的操作返回SUCCESS,则将调用该文件。

Success
   
   
   
      Employee Information is captured successfully.
   

建立动作

因此,让我们定义一个小的操作类Employee ,然后添加一个名为validate()的方法,如下所示在Employee.java文件中。确保您的操作类扩展了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");
      }
   }
}

如上面的示例所示,验证方法检查“名称”字段是否具有值。如果未提供任何值,我们会为“名称”字段添加字段错误,并附带自定义错误消息。其次,我们检查“年龄”字段的输入值是否在28到65之间,如果不满足此条件,我们将在验证字段上方添加错误。

配置文件

最后,让我们使用struts.xml配置文件将所有内容放在一起,如下所示:





   
   

      
         /index.jsp
         /success.jsp
      

   

以下是web.xml文件的内容-




   Struts 2
   
   
      index.jsp
   

   
      struts2
      
         org.apache.struts2.dispatcher.FilterDispatcher
      
   

   
      struts2
      /*
   

现在,右键单击项目名称,然后单击导出> WAR文件以创建War文件。然后,将此WAR部署在Tomcat的webapps目录中。最后,启动Tomcat服务器并尝试访问URL http:// localhost:8080 / HelloWorldStruts2 / index.jsp 。这将产生以下屏幕-

电子邮件用户输入

现在,无需输入任何必需的信息,只需单击“提交”按钮。您将看到以下结果-

错误

输入所需的信息,但输入错误的“发件人”字段,让我们说名称为“ test”,年龄为30,最后单击Submit按钮。您将看到以下结果-

成功

此验证如何工作?

当用户按下提交按钮时,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中的操作节点中添加以下结果。

/index.jsp

基于XML的验证

进行验证的第二种方法是在操作类旁边放置一个xml文件。基于Struts2 XML的验证提供了更多验证选项,例如电子邮件验证,整数范围验证,表单验证字段,表达式验证,正则表达式验证,必需的验证,必需的字符串验证,字符串长度验证等。

xml文件需要命名为‘[action-class]’-validation.xml 。因此,在我们的情况下,我们创建一个名为Employee-validation.xml的文件,其内容如下:


   
      
         
            The name is required.
         
      
   

   
     
         29
         64
         
            Age must be in between 28 and 65
         
      
   

上面的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的验证器