Учебники

Struts 2 — структура валидации

В этой главе мы подробнее рассмотрим структуру валидации 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 печатает кнопку отправки. Мы использовали свойство 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 , а затем добавим метод с именем 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 следующим образом:

<?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. Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресу http: // localhost: 8080 / HelloWorldStruts2 / index.jsp . Это создаст следующий экран —

Ввод пользователя по электронной почте

Теперь не вводите необходимую информацию, просто нажмите кнопку « Отправить» . Вы увидите следующий результат —

ошибка

Введите необходимую информацию, но введите неправильное поле From, допустим, что имя называется «test», а возраст — 30, и, наконец, нажмите кнопку « Отправить» . Вы увидите следующий результат —

успех

Как работает эта проверка?

Когда пользователь нажимает кнопку отправки, Struts 2 автоматически выполняет метод validate, и если какой-либо из операторов if, перечисленных внутри метода, имеет значение true, Struts 2 вызывает свой метод addFieldError. Если были добавлены какие-либо ошибки, Struts 2 не будет продолжать вызывать метод execute. Скорее, среда Struts 2 будет возвращать входные данные в результате вызова действия.

Следовательно, когда проверка завершается неудачно и Struts 2 возвращает ввод , среда 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. Общие валидаторы включают валидатор даты, валидатор Regex и валидатор длины строки. Проверьте следующую ссылку для получения более подробной информации Struts — валидаторы на основе XML .