wpjr2’s Weblog

Artigos e tutoriais úteis

Posts Tagged ‘Validator’

Struts Validator: Lab 09

Posted by wpjr2 em julho 5, 2008

Segue abaixo detalhes do laboratório 9 (Struts Validator) do curso de desenvolvimento de aplicações Web com Apache Struts:

1) Criar a classe EmpresaAction que estende de LookupDispatchAction

package curso.struts.visao.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;
import org.apache.struts.validator.DynaValidatorForm;

import curso.struts.modelo.dao.EmpresaDao;

public class EmpresaAction extends LookupDispatchAction {

public ActionForward pesquisar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// obtendo o formulario
DynaValidatorForm formulario = (DynaValidatorForm) form;
String nomeEmpresa = (String) formulario.get(“nome”);
// buscando a lista de empresa
List empresas = EmpresaDao.getInstancia().
getEmpresaPorNome(nomeEmpresa);
// salvando a lista na sessao
request.getSession().setAttribute(“empresas”, empresas);
// retornando para a lista
return mapping.findForward(“lista”);
}

protected Map getKeyMethodMap() {
Map mapa = new HashMap();
mapa.put(“acao.pesquisar”, “pesquisar”);
return mapa;
}
}

1a) Criar os arquivos de configuração (XML):

Copiar o validation-rules.xml do Lab09.zip para WEB-INF
Copiar o validation.xml do Lab09.zip para WEB-INF

2) Acrescentar no arquivo filtro.jsp a propriedade hidden:

<html:hidden property=”acao” value=”Pesquisar” />

3) Criar  no Struts-config.xml um novo form:

<form-bean name=”EmpresaForm”
type=”org.apache.struts.validator.DynaValidatorForm”>
<form-property name=”nome” type=”java.lang.String”/>
</form-bean>

4) Criar  no Struts-config.xml uma nova ação:

<action input=”/filtro.jsp” name=”EmpresaForm” parameter=”acao”
path=”/empresa” scope=”request”
type=”curso.struts.visao.action.EmpresaAction” validate=”true”>
<forward name=”lista” path=”/listaEmpresas.jsp”/>
</action>

5) Definir a validação do formulário no validation.xml:

<formset>
<form name=”EmpresaForm”>
<field depends=”required” property=”nome”>
<arg key=”empresa.nome” position=”0″ />
</field>
</form>
</formset>

6) Mudar no filtro.jsp a ação a ser executada pelo formulário:

Mudar de: <html:form action=”/pesquisaempresa”>
Para: <html:form action=”/empresa”>

7) Acrescentar no struts-config.xml o plugin do validator a ser usado:

<plug-in className=”org.apache.struts.validator.ValidatorPlugIn”>
<set-property property=”pathnames” value=”/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml”/>
</plug-in>

8) Adicionar a lib Lib commons-validator-1.3.1.jar ao projeto Web:

A Lib commons-validator-1.3.1.jar deve estar no diretório WebContent/WEB-INF/lib

9) Acrescentar a propriedade no arquivo application.properties:

acao.pesquisar=pesquisar

10) executar a aplicação via URL:

http://localhost:8080/curso/filtro.jsp

Anúncios

Posted in Curso Desenvolvimento para Web com Apache Struts e JSP | Etiquetado: , , | Leave a Comment »

Struts Validator: FormSet e i18n

Posted by wpjr2 em julho 4, 2008

Na aula de sábado passado, um de meus alunos (Rafael Albergaria) teve um problema ao utilizar o DynaValidatorForm para criar formulários dinâmicos no Struts e para estes serem validados pelo Jakarta Commons Validator 1.3.1. Este exercício está relacionado ao capítulo 9 que vimos na aula passada.

O problema foi que, na definição da validação do formulário (validation.xml), o <formset/> foi definido para uma localização específica (pt, BR), causando um problema ao executar a aplicação sobre um browser que não estivesse definido nesta localização.

<formset country=”BR” language=”pt”>
<form name=”EmpresaForm”>
<field depends=”required” property=”nome”>
<arg key=”empresa.nome” position=”0″ />
</field>
</form>
</formset>

Durante o exercício em sala de aula, como o meu browser estava definido para esta localização, o formset era encontrado corretamente e a validação era executada com sucesso. O problema ocorre quando a localização do browser está definida para um valor diferente do definido no <formset/>. Quando isto acontece, o Commons Validator não consegue encontrar o form definido no validation.xml, desta forma não executando a validação.

Para este problema, existem duas soluções:

a) não definir a localização no formset, tornando-o genérico para todas as localizações e idiomas

b) se for necessário definir a localização (validações para linguas específicas), implementar a validação específica em uma subclasse de DynaValidatorForm, utilizando-a na definição do form no arquivo de configurações struts-config.xml

Posted in Curso Desenvolvimento para Web com Apache Struts e JSP | Etiquetado: , | Leave a Comment »