[RESOLVIDO] Validação form Struts2

24 respostas
E

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

J

Olá.

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

Abraços.

E

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>
J

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 :? .

J

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

E

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

J

Blz.

Tenta apenas

<s:fielderror/>

E vê se rola.

E

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

E

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.

J

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) ?

E

Na verdade eu estou usando o Eclipse.

D

Posta a lista dos jars que está utilizando

J

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.

E

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

D

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…

E

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?

J

Eu faria esse teste :wink:

E

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

D

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

D

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

E

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

D

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.

E

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.

E

OBRIGADO A TODOS PELA AJUDA!

E

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