martes, 30 de octubre de 2007

Ejecutar el validador automático de formularios de struts desde Ajax

A través de esta clase se podría llamar al validador automático de formularios de struts (que extienden de ValidatorForm) que se configura en el fichero 'validation.xml'.

Es ideal para realizar validaciones de servidor cuando se realiza una petición usando Ajax desde un formulario, aunque se podría incluso usar para forzar la validación desde nuestros propios servlets o actions de Struts.

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

import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorException;
import org.apache.log4j.Logger ;
import org.apache.struts.action.ActionErrors;

public class StrutsFacadeHelper {
private static final Logger log = Logger.getLogger(StrutsFacadeHelper.class);

/**
* Permite validar un formulario o bean que extienda de ValidatorForm
*
* @param formName Nombre del formulario declarado en Struts-config y validation.xml
* @param formBean Objeto ValidatorForm con los datos a validar
* @param sc ServletContext
* @param request HttpServletRequest
* @param errors ActionErrors (a devolver)
*/
public static void ValidateForm (String formName, Object formBean, ServletContext sc, HttpServletRequest request, ActionErrors errors) {
Validator validator = org.apache.struts.validator.Resources.initValidator(formName, formBean, sc, request, errors, 0);

try {
validator.validate();
} catch (ValidatorException e) {
log.error(e.getMessage(), e);
}
}
}

Yo lo he usado con DWR con buenos resultados. He aquí un ejemplo (suponemos que la configuración de DWR y de la clase que ejecuta esta función Ajax está correcta):

public String compruebaUsuarioClaveDWR (String usuario_id, String clave) {...

//Obtenemos el contexto
WebContext ctx = WebContextFactory.get();
HttpServletRequest request = ctx.getHttpServletRequest();
ActionErrors errores = new ActionErrors();

//Obtener formulario
UsuarioForm formulario = new UsuarioForm (usuario_id, clave);

//Validación de servidor del formulario
StrutsFacadeHelper.ValidateForm("usuarioForm", formulario, ctx.getServletContext(), request, errores);

//Comprobar si hay errores
if (errores.isEmpty()) {
//funcionalidad, comprobar usuario - clave
} else {
request.setAttribute (Globals.ERROR_KEY, errores);
return ctx.forwardToString("[URL]/error.jsp"); //o devolver una cadena de errores (o xml) en vez de devolver una página que contenga ......
}

Imágenes Dockers

Estoy aprendiendo bastante sobre el tema de docker y docker swarm , gestión de Stacks, Servicios, Containers, Volumenes, .. y sus configurac...