[RESOLVIDO] Validação form Struts2

24 respostas
elberlima

Olá!
Estou usando Struts 2.
Ao tentar fazer validação do meu formulário, pesquisei e segui os passos da apostila da Caelum FJ-21 que tem disponível para download.

1º - Coloquei a notação @Validations acima da classe SalvaProcessoAction em seguida fiz um extends para ActionSupport:

@Validations(requiredStrings={
		@RequiredStringValidator(fieldName="processo.codProcesso", message = "Digite o código do processo!")
})
public class SalvaProcessoAction extends ActionSupport{

	/*...restante da action*/
2º - Logo depois coloquei o meu Result como name "input":
@Action(value = "salva-processo", results = {
			@Result(name = "ok", location = "/jsp/salva-andamento.jsp"),
			@Result(name = "input", location = "/jsp/salva-processo.jsp")
	})
public String execute(){
       /*..minhas instancias com Try Catch.*/

3º - Por último coloquei o acima da Tag

:

<body>
		<s:fielderror fieldName="processo.codProcesso"/>
		<form action="salva-processo" method="post">
 <!--...restante dos dados da JSP-->
Porém quando eu tento acessar minha jsp salva-processo.jsp, apresenta o seguinte 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: Template /template/xhtml/fielderror.ftl not found. - Class: freemarker.template.Configuration
File: Configuration.java
Method: getTemplate
Line: 489 - freemarker/template/Configuration.java:489:-1
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:536)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)

Alguém poderia me ajudar com a configuração deste template ou me indicar onde encontrar o material para esta. Esta difícil de achar...

Obrigado!

24 Respostas

jyoshiriro

Olá.

Amigo você colocou a tag <s:head/> dentro de seu ?
Todas as suas bibliotecas estão corretas?

Abraços.

elberlima

Olá!
eu coloquei da seguinte forma:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%@ taglib uri="/struts-dojo-tags" prefix="sx" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>		
	
<title>Cadastro de Processo</title>
<s:head/>
</head>
<body>
		<s:fielderror fieldName="processo.codProcesso"/>
		<form action="salva-processo" method="post">
                <table >

			<tr>
			       <td>Processo:<font color="red">*</font> </td>
				<td>
				     <input type="text" name="processo.codProcesso" maxlength="55" size="55"/>
				</td>
			</tr>
jyoshiriro

Amigo, se teu projeto ainda tá no inicio, ainda há tempo de se livrar da furada das “struts-dojo-tags”. São uma bomba relógio!

Prefira usar o Jquery-plugin que apesar de não ser oficial do framework é muito estável, existe há anos, tem muito mais componentes e usa Jquery :smiley: (quase sempre a versão mais atual) ao invés do Dojo :? .

jyoshiriro

E quanto ao erro, parece ser bug do framework. Qual versão está usando?

elberlima

Eu ja desisti do Dojo rsrsrsrs… apenas esqueci de retirar a taglib.
A versão é struts2-core-2.2.3.jar

jyoshiriro

Blz.

Tenta apenas

<s:fielderror/>

E vê se rola.

elberlima

elberlima:
Eu ja desisti do Dojo rsrsrsrs… apenas esqueci de retirar a taglib.
A versão é 2.2.3

elberlima

coloquei só com:

<s:fielderror/>

Apresentou outro 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: IS0-8859-1 - [unknown location]
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:536)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)


root cause 

IS0-8859-1 - [unknown location]
	org.apache.struts2.components.UIBean.end(UIBean.java:515)
	org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
	org.apache.jsp.jsp.salva_002dprocesso_jsp._jspx_meth_s_005fhead_005f0(salva_002dprocesso_jsp.java:788)
	org.apache.jsp.jsp.salva_002dprocesso_jsp._jspService(salva_002dprocesso_jsp.java:224)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)

logo depois ao atualizar a página volto para o primeiro erro.

jyoshiriro

Ih rapaz!

Amigo, dou aulas de programação Web numa faculdade. E esse mesmíssimo erro ocorreu no note de apenas 1 aluno.

Tudo estava funcionando perfeitamente com ele. Dai, de uma hora para outra, mesmo sem fechar o Netbeans nem nada, começou a dar esse erro. Nem fechando o Netbeans nem reininciando o note resolveu. Chegamos à conclusão de que era bug no Netbeans. Ele ficou de reintalar a IDE e me dizer se resolveu.

Você usa o Netbeans 7.1 p/ Windows (é o que ele usa) ?

elberlima

Na verdade eu estou usando o Eclipse.

drsmachado

Posta a lista dos jars que está utilizando

jyoshiriro

Agora me deu medo rsrsrsrs

Amigo, você tem outras JSP com taglibs que funcionam?

Do projeto do meu aluno todas as JSP, sem exceção, pararam de funcionar.

elberlima

kkkkk… deu medo foi boa! kkk…
Todas as JSP Funcionam suas Actions (insert,select,update), só não funciona esta que eu estou começando a tentar validar rs

drsmachado

jyoshiriro:
Agora me deu medo rsrsrsrs

Amigo, você tem outras JSP com taglibs que funcionam?

Do projeto do meu aluno todas as JSP, sem exceção, pararam de funcionar.


Isso não me parece bug de IDE, muito mais para problema com as libs que ele está utilizando.
A freemarker é uma “bomba relógio” também. E é nela que está sendo acusado o erro…

elberlima

drsmachado:
jyoshiriro:
Agora me deu medo rsrsrsrs

Amigo, você tem outras JSP com taglibs que funcionam?

Do projeto do meu aluno todas as JSP, sem exceção, pararam de funcionar.


Isso não me parece bug de IDE, muito mais para problema com as libs que ele está utilizando.
A freemarker é uma “bomba relógio” também. E é nela que está sendo acusado o erro…

Atualizando para a versão 2.3.3 deve resolver o problema?

jyoshiriro

Eu faria esse teste :wink:

elberlima

Pessoal, tentei atualizar as libs e nada de resultado positivo =/

Não teria que configurar este template que é apresentado no erro não?

Template /template/xhtml/fielderror.ftl not found. - Class: freemarker.template.Configuration File: Configuration.java Method: getTemplate

drsmachado

Cara, tem alguma coisa muito errada com teu projeto…
Aparentemente não tem nada errado.

drsmachado

Uma coisa que pode não ter nada a ver, as outras jsps estão sem a taglib do dojo?

elberlima

As outras JSP’s estão com as mesmas taglibs…

drsmachado

Bom, isso está muito estranho.
Eu até sugeriria refazer tanto a action quando a jsp, mas não sei se funcionará. Está mesmo na loteria agora.

elberlima

Pessoal,
o que estava impedindo a validação do meu projeto era um arquivo chamado: struts.properties. Dentro dele eu tinha colocado:

struts.i18n.encoding=IS0-8859-1

para que as minhas informações que estão sendo passadas pela minha jsp fossem armazenadas no banco com caracteres especiais. Ao retirar este, minhas validações passaram a funcionar normalmente.

elberlima

OBRIGADO A TODOS PELA AJUDA!

elberlima

Galera só para apresentar a resposta:

O arquivo de configuração do struts.properties estava incorreto, segue abaixo configuração correta:

struts.devMode=true;
struts.custom.i18n.resources=resources
struts.i18n.encoding=ISO-8859-1
struts.locale=pt_BR
Criado 18 de maio de 2012
Ultima resposta 22 de mai. de 2012
Respostas 24
Participantes 3