410013796724260
• Webmoney
R335386147728
Z369087728698
Проверка данных, validateНи одно WEB приложение не способно обойтись без проверки данных, введенных пользователем. Пользователь может непроизвольно внести ошибку, а программа должна помогать избегать ошибок, связанных с вводом информации. В Struts2 присутствует мощная система для проверки введенных пользователем данных validate. Проверка данных выполняется на уровне действий (action-класс). Для разработчиков необходимо только создать action-класс, наследующий ActionSupport, и переопределить метод validate, в котором описать всю логику проверки. Метод validate определен в интерфейсе com.opensymphony.xwork2.Validateable, который наследуется классом ActionSupport. Реализованные механизмы класса ActionSupport позволяют отобразить результаты проверки пользователю. Struts2 пример с validateРассмотрим простое приложение Struts2 с использованием метода validate action-класса. На следующем скриншоте представлена структура проекта StrutsValidation в среде разработки Eclipse. Проект включает action-класс EmployeeAction.java, файл конфигурации struts.xml, две JSP-страницы и дескриптор приложения web.xml. Листинг и описание web.xml приведен на странице Пример Struts2, где дополнительно рассмотрен вопрос кодировки передаваемых серверу сообщений. Листинг класса EmployeeAction.javapackage example; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; public class EmployeeAction extends ActionSupport { private String name; private int age; @Override public String execute() { if ((getName().trim().length() > 0)) { return Action.SUCCESS; } return Action.INPUT; } @Override public void validate() { if (isEmptyString(name)) addFieldError("name","Необходимо ввести имя"); if ((age < 24) || (age > 65)) addFieldError("age","Возраст должен быть от 24 до 65"); if (isEmptyString(name) && ((age < 24) || (age > 65))){ addActionError ("Не заполнена форма" ); } } private boolean isEmptyString (String value) { return value == null || "".equals (value.trim ()); } 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; } } В унаследованном от ActionSupport action-классе EmployeeAction.java переопределены метод execute и validate. Основная функция метода validate связана с проверкой двух параметров - заполнение поля "Имя" и определение возраста в пределах от 24 до 65. Следует обратить внимание на два метода ActionSupport, которые позволяют сообщать об ошибках. Это метод addActionError, который сообщает об ошибке при выполнении действия, и addFieldError, сообщающий об ошибке при заполнении определенного поля. Методу addFieldError необходимо передать два параметра. Первым параметром является поле формы, над которым будет размещена ошибка. Вторым параметром является текст ошибки. Методу addActionError в качестве параметра передается только текст ошибки. Таким образом, если не заполнено имя пользователя, или не правильно указан возраст, то логично вызвать addFieldError. А если, например, не заполнено несколько полей или имеются различия в связанных полях (пароль и подтверждение), то логичнее выдать сообщение об общей ошибке. Файл конфигурации 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="default" extends="struts-default"> <action name="employee" class="example.EmployeeAction" method="execute"> <result name="input">/index.jsp</result> <result name="success">/welcome.jsp</result> </action> </package> </struts> В файле конфигурации определено действие "employee". В случае успешного завершения (result="success"), будет выполнен переход на страницу welcome.jsp. JSP страница index.jsp<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Сотрудник</title> </head> <body> <s:form action="employee" method="post"> <font style="color:red"><s:actionerror/></font> <s:textfield name="name" label="Имя" size="20" /> <s:textfield name="age" label="Возраст" size="20" /> <s:submit value="OK" align="center" /> </s:form> </body> </html> На данной странице оператором <s:actionerror/> отмечено местоположение представления сообщения об ошибке, если форма не будет заполнена. Пользователь должен ввести "Имя" и возраст в пределах от 24 до 65. JSP страница welcome.jspПри успешном завершении action-класса "employee" пользователю будет открыта страница welcome.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Добро пожаловать</title> </head> <body> <h3>Приветствуем Вас, <s:property value="name" /> !</h3> <i>Исходный данные сохранены !</i> </body> </html> На странице welcome.jsp интерес представляет оператор <s:property value="name" />, который позволяет прочитать значение name после выполнения action-класса. В случае, если пользователь не заполнит поля, то сервер обновит страницу index.jsp и выведет все сообщения. Скачать примерИсходные коды рассмотренного примера можно скачать здесь (5.20 Мб). |