Validate Struts

8 respostas
S

Estou começando com struts agora e nao estou conseguindo implmentar o validade.

O meu metodo validate esta assim
public ActionErrors validate(ActionMapping map, HttpServletRequest req){
		ActionErrors erros = new ActionErrors();
		
		if(nome==null || nome.equals(""))
			erros.add("nome", new ActionMessage("erro.nome"));
		
		if(telefone==null)
			erros.add("telefone", new ActionMessage("erro.telefone"));
		
		return erros;
	}
e quando executo a pagina com o campo nome sem esta praencheido acontece o erro:
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1012)
	org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:980)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

java.lang.ClassCastException
	org.apache.struts.taglib.html.ErrorsTag.doStartTag(ErrorsTag.java:215)
	org.apache.jsp.jsp.novoContato_jsp._jspx_meth_html_errors_0(novoContato_jsp.java:137)
	org.apache.jsp.jsp.novoContato_jsp._jspx_meth_html_html_0(novoContato_jsp.java:109)
	org.apache.jsp.jsp.novoContato_jsp._jspService(novoContato_jsp.java:75)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1012)
	org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:980)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.30

Alguem sabe oq esta acontecendo?

Valeu

8 Respostas

E

aparentemente tudo certo.

Criou seus get set’s dentro do form bean ?
Como está utilizando dentro do seu view estas propriedades ?

[]s,
Eduardo Lima

S

Sim, criei os setters e getters.

aqui esta a pagina
html:html>

<head>
<title>::Novo Contato::</title>
</head>
<body>

<html:errors/>

<html:form action="/novoContato">

	<table border="0" width="33%">
		<tr>
			<td>Nome:</td>
			<td><html:text property="nome" /></td>
		</tr>
		<tr>
			<td>Telefone:</td>
			<td><html:text property="telefone" /></td>
		</tr>
		<tr>
			<td>E-mail:</td>
			<td><html:text property="email" /></td>
		</tr>
		<tr>
			<td>Endereço:</td>
			<td><html:text property="endereco" /></td>
		</tr>
		<tr>
			<td colspan="2"> <html:submit>Cadastrar</html:submit> </td>
		</tr>
	</table>
	
</html:form>

A tag para mostrar os erros e esta mesmo?

quando retiro essa tag da certo mas nao aparece mensagem nenhuma e quando preencho os campos a aplicação roda normalmente.

Valeu

E

vc setou estes dois erros no .properties que está usando ?

erro.nome
erro.telefone

Para apenas validar de ele é null vc pode criar um método simples para fazer isso, ex:

[/code]

public boolean isEmpty(String s){
return s == null || s.trim().length() == 0;
}

[code]

[]s,
Eduardo Lima

S

Sim o campos erro.nome e erro.telefone existem no properties.

A chamada dos erros na pagina seria como so com esta tag html:errors?

E

sim, a chamada está correta…

<html:errors />

vc pode chamar tb indidualmente por cada erro

<html:errors property=“nome” />
<html:errors property=“telefone” />

agora, não sei se é relevante, mas utiliza um nome diferente para estes errors q vc está setando, de repente pode influenciar…

erros.add(“errNome”, new ActionMessage(“erro.nome”));
erros.add(“errTelefone”, new ActionMessage(“erro.telefone”));

Como disse não sei se é relevante, mas não custa tentar(pois os nomes de errors estão com o mesmo do campo)

Outra coisa ai a ser verificada é se esta tudo certo no struts-config (como a pagina carregou acredito que estaja, mas vale dar uma olhada)

S
fiz oq vc disse e continua dando o mesmo erro o struts-config esta assim:
<struts-config>
	
	<message-resources parameter="Mensagens" />
	
	<form-beans>
		<form-bean name="ContatoForm" type="com.accenture.struts.form.ContatoForm" />
	</form-beans>

	<action-mappings>
		<action path="/listaContatos" type="com.accenture.struts.action.ListaContatosAction">
			<forward name="consulta" path="/jsp/consulta.jsp" />
			<forward name="listaVazia" path="/jsp/lista-vazia.jsp" />
		</action>
		
		
		<action path="/novoContato" name="ContatoForm" input="/jsp/novoContato.jsp" 
							type="com.accenture.struts.action.AdicionaContatoAction" scope="request">
			<forward name="sucesso" path="/listaContatos.do" />
		</action>
		
		<action path="/removeContato" type="com.accenture.struts.action.RemoveContatoAction">
			<forward nome="sucesso" path="/listaContatos.do" />
		</action>
		
	</action-mappings>

</struts-config>

Esta faltando alguma coisa? tenho q configurar o validate no struts-config?

Valeu

E

está tudo certo, me mostra de novo o erro,

e me diz uma coisa, já conseguiu imprimir alguma coisa do .properties para ver se ele está certo o caminho ?

[],
Eduardo Lima

S
o erro e esse:
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1012)
	org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:980)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

java.lang.ClassCastException
	org.apache.struts.taglib.html.ErrorsTag.doStartTag(ErrorsTag.java:215)
	org.apache.jsp.jsp.novoContato_jsp._jspx_meth_html_errors_0(novoContato_jsp.java:137)
	org.apache.jsp.jsp.novoContato_jsp._jspx_meth_html_html_0(novoContato_jsp.java:109)
	org.apache.jsp.jsp.novoContato_jsp._jspService(novoContato_jsp.java:75)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1012)
	org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:980)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.30

sim, ja consegui imprimir usando o properties.

Valeu

Criado 28 de novembro de 2006
Ultima resposta 28 de nov. de 2006
Respostas 8
Participantes 2