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.java
package 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 Мб). |
