Re:Struts (ActionErrors validate) Não Funciona!

14 respostas
plentz

Não duplique seus tópicos.

14 Respostas

marciobarroso

Mude esta linha no validate:

erros.add("nome", new ActionMessage("nome.erro"));

// Mudar para
erros.add("errors", new ActionMessage("nome.erro"));

[]'s

ramilani12

Coloque seu <html:errors/> antes da sua tag<html:form> , não se influencia mas …

Outra coisa como está seu struts-config.xml , vc setou o validate = true ?

&lt;action
             path="/LogonSubmit"
             type="app.LogonAction"
             name="logonForm"
             scope="request"
             validate="true"
             input="/logon.jsp" /&gt;
        &lt;action path="/logoff" type="app.LogoffAction" /&gt;

Caso o validate retorne false e ele redireciona para logon.jsp com a mensagem de erro

marciobarroso

ramilani12:
Coloque seu <html:errors/> antes da sua tag<html:form> , não se influencia mas …

Outra coisa como está seu struts-config.xml , vc setou o validate = true ?

Se não está apresentando as msgs de erro, ele está setando o validate=true.

Qto a usar o <html: errors/> antes do <html:form> não influencia até pq não tem relação com o form. Esta tag itera uma lista de Strings do escopo.

[]'s

marciobarroso

Cara … se a forma que eu passei não funcionar, tente

errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.usuario.email"));

Um das 2 alternativas com certeza funcionará.

[]'s

ramilani12

everson_z:
marciobarroso:
Cara … se a forma que eu passei não funcionar, tente

errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.usuario.email"));

Um das 2 alternativas com certeza funcionará.

[]'s

De onde saiu esse error.usuario.email ???

É só um exemplo…

ramilani12

marciobarroso:
ramilani12:
Coloque seu <html:errors/> antes da sua tag<html:form> , não se influencia mas …

Outra coisa como está seu struts-config.xml , vc setou o validate = true ?

Se não está apresentando as msgs de erro, ele está setando o validate=true.

Qto a usar o <html: errors/> antes do <html:form> não influencia até pq não tem relação com o form. Esta tag itera uma lista de Strings do escopo.

[]'s

Mas se ele marcar com validate false ai sim não será apresentado as mensagens de validação do formulário e o ActionForm não fará a validação

Quero saber como ele marcou o validate?

ramilani12

Vc definiu a tag input tbm?

ramilani12

Vc pode mudar sim
Mas vc precisa especificar no seu web.xml o novo caminho do arquivo Resources
O framework tratará da seguinte maneira:

:arrow: ele procurará por default no WEB-INF/classes
:arrow: no diretorio WEB-INF/classes/resources
:arrow: e ele pesquisará o pacote de mensagens(arquivo resources) em um arquivo default chamado: application.properties

Por compatibilidade mantenha seu arquivo Resources dentro do dir WEB-INF/classes/resources

Segue um exemplo no seu web-xml:
Vamos supor que seu arquivo se chama mensagens.properties

&lt;init-param&gt;
       &lt;param-name&gt;mensagens&lt;/param-name&gt;
      &lt;param-value&gt; resources.mensagens &lt;/param-value&gt;
&lt;/init-param&gt;

O param-value deve ser nome totalmente qualificado indicando até pacote e subpacote

Na tag <message-resources>
Vc adiciona o nome do parametro que definimos no <param-name>

&lt;message-resources parameter="resources.mensagens" /&gt;
everson_z

Já fiz de tudo e nada... esta dando raiva
Quero ver o MessageResources.properties mostrar a msg de erro mas, nada.

Welcome.jsp
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<html:html>
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">

	<html:form action="acao.do">
		<html:text property="nome"/>
		<html:submit value="OK"/>
	</html:form>
	<html:errors/>
</body>
</html:html>
Formulario
public class Formulario extends ActionForm {

	private String nome;
	private String pass;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public ActionErrors validate(ActionMapping mapping, HttpServletRequest req, HttpServletResponse res)
							throws Exception{
		ActionErrors erros = new ActionErrors();
		if(nome == null || nome.equals("")){
			erros.add("nome", new ActionMessage("nome.erro"));
		}
		return erros;
	}
}
Acao
public class Acao extends Action {
	
	public ActionForward execute(ActionMapping mapping, ActionForm form,
				HttpServletRequest req, HttpServletResponse res) throws Exception{

		Formulario formulario = (Formulario) form;
		
		System.out.println(formulario.getNome());
		req.setAttribute("objetoToRender", formulario.getNome());
		return mapping.findForward("retorna");
	}
}
MessageResources.properties
welcome.title=Aplicação em Branco
welcome.heading=Welcome!
nome.erro=Verifique o campo nome!

Vlw

everson_z

Não fiz isso… (token)

everson_z

marciobarroso:
Cara … se a forma que eu passei não funcionar, tente

errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.usuario.email"));

Um das 2 alternativas com certeza funcionará.

[]'s

De onde saiu esse error.usuario.email ???

everson_z

Esta sim… validate = true

everson_z

Tb

<action-mappings>
            <!-- Default "Welcome" action -->
            <!-- Forwards to Welcome.jsp -->
        <action
            path="/Welcome"
            forward="/pages/Welcome.jsp"/>
       <action
            path="/acao"
            name="formulario"
            scope="request"
            validate="true"
            input="/pages/Welcome.jsp"
            type="app.acao.Acao">
            <forward name="retorna" path="/pages/Welcome.jsp" />
       </action>
            
    </action-mappings>
everson_z

Eu não posso trocar o MessageResources de lugar?
Tipo

<message-resources parameter="app.bundle.MessageResources" />

Deixei como padrão e passou a funcionar

Criado 5 de abril de 2007
Ultima resposta 6 de abr. de 2007
Respostas 14
Participantes 4