Crear nueva validation rule

kaysa
24 de Marzo del 2006
Hola, ¿alguien ha utilizado sus propias validaciones para los
formularios creando una nueva regla de validacion? Llevo unos días
intentando validar un formulario con mis propias reglas pero no soy
capaz de que me la reconozca.

He creado una clase que contiene mis reglas de validacion, la he
añadido en el fichero validation-rules.xml, y en el campo del
formulario correspondiente he añadido la validacion en validation.xml.

El problema que tengo es que no intenta realizar la validación. De
hecho, he probado con una validacion que siempre devuelve false para
que me de algún error, pero nada, sigue validando con éxito. Parece
que el fallo lo debo de tener en validation.xml porque le da igual si
defino la regla de validacion o no que no me devuelve ningún error.
He probado con otro tipo de validaciones como required, mask, date y
las realiza correctamente. Falla cuando añado mi validacion.

Bueno, añado un poco de código para que se vea más claro lo que he
hecho:

MyHolidaysRequestValidator
==========================

package application.http.view.validator;

import java.io.Serializable;
import java.util.Calendar;

import java.util.StringTokenizer;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericTypeValidator;
import org.apache.commons.validator.GenericValidator;
//import org.apache.commons.validator.UrlValidator;
import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.util.ValidatorUtils;
import org.apache.struts.validator.Resources;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.util.RequestUtils;

public class MyHolidaysRequestValidator implements Serializable {

private static final Log log = LogFactory.getLog
(MyHolidaysRequestValidator.class);

public static boolean validateHolidaysRequest(
Object bean,
ValidatorAction va,
Field field,
ActionMessages errors,
Validator validator,
HttpServletRequest request) {

//aqui habia codigo, pero para comprobar que funciona intento que
//siempre devuelva validacion fallida.
return false;

}

}

validator-rules.xml
===================

<!-- Lo situo justo detras del validatorURL y antes de _javaScript del
fichero por defecto. Es decir, se encuentra entre las etiquetas <form-
validation> y <globals> -->

<validator name="holidaysRequest"

classname="application.http.view.validator.MyHolidaysRequestValidator"
method="validateHolidaysRequest"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
org.apache.commons.validator.Validator,
javax.servlet.http.HttpServletRequest"
msg="errors.request"/>

struts-config.xml
=================

<!-- En este fichero defino el formulario y el action
correspondiente, he probado con otro tipo de validaciones como
required, mask, date y las realiza correctamente. Falla cuando añado
mi validacion. -->

<form-bean name="holidaysRequestForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="startDate" type="java.lang.String"/>
<form-property name="finalDate" type="java.lang.String"/>
</form-bean>

validation.xml
==============

<!-- Si añado la validacion holidaysRequest (o si solo intento hacer
esta validacion) me da error, es decir, no realiza la validacion y
redirecciona a la pagina que he definido como success. -->

<form name="holidaysRequestForm">

<field property="startDate" depends="required, mask, date,
holidaysRequest">
<var><var-name>mask</var-name><var-value>[0-9]{1,2}-[0-9]{1,2}-[0-
9]{4}</var-value></var>
<var><var-name>datePattern</var-name><var-value>dd-MM-yyyy</var-
value></var>
<!-- la siguiente variable la utilizo para la validacion que inteto
realizar -->
<var><var-name>finalProperty</var-name><var-value>finalDate</var-
value></var>
</field>

<field property="finalDate" depends="required, mask, date">
<var><var-name>mask</var-name><var-value>[0-9]{1,2}-[0-9]{1,2}-[0-
9]{4}</var-value></var>
<var><var-name>datePattern</var-name><var-value>dd-MM-yyyy</var-
value></var>
</field>
</form>


¿Alguien ha tenido alguna experiencia de este tipo?

Gracias, un saludo.

Rascayu
24 de Marzo del 2006
Yo tengo mis propias validaciones y lo único que se diferencia mi código al tuyo es que yo no tengo implements Serializable.

Yo tengo una clase normal:
public class ValidationUtil{

public static boolean validateTwoFields(Object bean, ValidatorAction va, Field field, ActionMessages errors, HttpServletRequest request) {
... etc...