Erro Struts - Again

8 respostas
T

EDITADO

Pessoal, o erro anterior que estava dando, consegui arrumar, era a minha tag beans que estava no local errado, ela tem obrigatoriamente que ficar fora do actions-mappings…

Bom, agora o erro é outro, parece que não tá encontrando o path correto…

ContatoForm

package br.com.thiago.struts.form;

import org.apache.struts.action.ActionForm;

import br.com.thiago.jdbc.modelo.Contato;

public class ContatoForm extends ActionForm{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Contato contato = new Contato();
	
	public Contato getContato() {
		return this.contato;
	}

}

AdicionaContatoAction

package br.com.thiago.struts.action;

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

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.thiago.jdbc.dao.ContatoDAO;
import br.com.thiago.jdbc.modelo.Contato;
import br.com.thiago.struts.form.ContatoForm;

public class AdicionaContatoAction extends Action{
	
	@Override
	public ActionForward execute(ActionMapping map, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		System.out.println("Tentando criar um novo contato...");
		
		ContatoForm formulario = ((ContatoForm) form);
		
		Contato contato = formulario.getContato();
		
		ContatoDAO dao = new ContatoDAO();
		dao.adiciona(contato);
		
		return map.findForward("adiciona");
		
	}

}

struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<struts-config>

		<form-beans>
			<form-bean name="ContatoForm" type="br.com.thiago.struts.form.ContatoForm"/>
		</form-beans>

	<action-mappings>
		
		<action path="/teste" type="br.com.thiago.struts.action.TesteSimplesAction">
			<forward name="ok" path="/exemplo.jsp"/>
		</action>
		
		<action path="/listacontatos" type="br.com.thiago.struts.action.ListaContatosAction">
			<forward name="lista" path="/lista.jsp"/>
			<forward name="vazia" path="/vazia.jsp"/>
		</action>
		
		<action path="/novoContato" name="ContatoForm" type="br.com.thiago.struts.action.AdicionaContatoAction">
			<forward name="adiciona" path="/listaContatos.do"/>
		</action>
				
	</action-mappings>
	
	<!-- Arquivo de Mensagens -->
	<message-resources parameter="MessageResources"/>
	
</struts-config>

novo.jsp

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<html:html>
<head><title>Sistema de Teste do Struts</title></head>
<html:errors/>
<html:form action="/novoContato" focus="contato.nome">
	
	Nome:
	<html:text property="contato.nome"/>
	<br/>

	Email:
	<html:text property="contato.email"/>
	<br/>

	<html:submit>Enviar dados</html:submit>
	<br/>
	
</html:form>
</html:html>

And finally the issue!!!

HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException: javax.servlet.ServletException: org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

javax.servlet.ServletException: org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.
	org.apache.struts.chain.commands.AbstractSelectAction.execute(AbstractSelectAction.java:71)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

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

8 Respostas

robinsonbsilva

posta seu struts.config, assim poderemos ver seus <form-beans>

T

Já está lá… ;D

É o terceiro bloco de código…

marcia

Você está errando no mapeamento do Struts

O correto seria:

&lt;struts-config&gt;

    &lt;form-beans&gt;
         &lt;form-bean
                dynamic="false" 
	name="ContatoForm"
                type="br.com.thiago.struts.form.ContatoForm" /&gt;
         &lt;/form-beans&gt;

         &lt;action-mappings&gt;
	&lt;action
                       path="/novoContato"
	       type="br.com.thiago.struts.action.AdicionaContatoAction"
	       name="ContatoForm"
	       scope="request"
	       validate="true"
	       input="/novo.jsp"&gt;
	       &lt;forward name="success" path="/listaContatos.jsp" /&gt;
	&lt;/action&gt;		
				
         &lt;/action-mappings&gt;
	
         &lt;!-- Arquivo de Mensagens --&gt;
         &lt;message-resources parameter="resources.application"/&gt;
	
&lt;/struts-config&gt;
marcia

:frowning:

A formatação ficou um pouquinho bagunçada, mas acho que dá p/vc entender.

T

Olá Marcia, é o que eu acabei de ver… mesmo assim, muito obrigado…
No entando concertando isso, ocorreu outro erro…

T

Consultei o banco de dados agora e ele tá gravando direitinho, só não me retorna que gravou nem nada…

e ai me retorna…

InvalidPathException: No action config found for the specified url
marcia

Tem um erro ainda. Na sua action vc diz:

return map.findForward("adiciona");

e no struts-config eu te disse p/fazer isso:

&lt;forward name="success" path="/listaContatos.jsp" /&gt;

Ou vc muda na action ou no struts-config, pq sua action tá passando um parâmetro que não existe no struts-config.
Você também precisa indicar o nome correto do jsp para o qual será redirecionado.

Normalmente eu redireciono para um jsp assim:

&lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
&lt;title&gt;Gravação de dados&lt;/title&gt;
&lt;script&gt;
  var carregado = true;
  var sucesso = true;
    function alerta(){
    alert('A inserção foi realizada com sucesso !!!'); 
    window.close();
  }
  
&lt;/script&gt;
&lt;/head&gt;
&lt;body onLoad="alerta()"&gt; 
&lt;/body&gt;
&lt;/html&gt;
T
marcia:
Tem um erro ainda. Na sua action vc diz:
return map.findForward("adiciona");

e no struts-config eu te disse p/fazer isso:

&lt;forward name="success" path="/listaContatos.jsp" /&gt;

Ou vc muda na action ou no struts-config, pq sua action tá passando um parâmetro que não existe no struts-config.
Você também precisa indicar o nome correto do jsp para o qual será redirecionado.

Normalmente eu redireciono para um jsp assim:

&lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
&lt;title&gt;Gravação de dados&lt;/title&gt;
&lt;script&gt;
  var carregado = true;
  var sucesso = true;
    function alerta(){
    alert('A inserção foi realizada com sucesso !!!'); 
    window.close();
  }
  
&lt;/script&gt;
&lt;/head&gt;
&lt;body onLoad="alerta()"&gt; 
&lt;/body&gt;
&lt;/html&gt;

Eu entendi Marcia...
Eu já havia trocado o success que você me passou lá também...
O problema é que ele acha que está errado este listaContatos.do

Fiz o texto conforme você me passou e perfeito, já imagino onde utiliza-lo...

O negocio é que eu peguei essa estrutura na apostila da caelum e estava tentando replica-la aqui em meu projeto, mas não consegui, e ele usa justamente do jeito em que eu tentei fazer... porém o meu dá erro...

Na apostila tá assim...

public ActionForward execute(ActionMapping map, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// log
System.out.println("Tentando criar um novo contato...");
// formulário de cliente
ContatoForm formulario = ((ContatoForm) form);
// acessa o bean
Contato contato = formulario.getContato();
// adiciona ao banco de dados
ContatoDAO dao = new ContatoDAO();
dao.adiciona(contato);
// ok.... visualização
return map.findForward("ok");
}
2)
Vamos configurar sua ação
a) Define sua ação /novoContato no arquivo strutsconfig.
xml apontando para a classe
AdicionaContatoAction.
&lt;action path="/novoContato" name="ContatoForm"
type="br.com.caelum.struts.action.AdicionaContatoAction"&gt;
&lt;/action&gt;
b) Em caso de sucesso (ok), redirecione para o /listaContatos.do (isto mesmo, estamos
encadeando duas ações).
&lt;action path="/novoContato" name="ContatoForm"
Capítulo 14 Jakarta
Struts Página
143
Caelum ? http://www.caelum.com.br Java
para desenvolvimento Web
type="br.com.caelum.struts.action.AdicionaContatoAction"&gt;
&lt;forward name="ok" path="/listaContatos.do"/&gt;
&lt;/action&gt;
3)
Crie seu arquivo novo.jsp
&lt;%@ taglib uri="http://struts.apache.org/tags-html"
prefix="html" %&gt;
&lt;html:html&gt;
&lt;head&gt;&lt;title&gt;Sistema de Teste do Struts&lt;/title&gt;&lt;/head&gt;
&lt;html:errors/&gt;
&lt;html:form action="/novoContato" focus="contato.nome"&gt;
Nome:
&lt;html:text property="contato.nome"/&gt;
<br/>
Email:
&lt;html:text property="contato.email"/&gt;
<br/>
Endereço:
&lt;html:text property="contato.endereco"/&gt;
<br/>
&lt;html:submit&gt;Enviar dados&lt;/html:submit&gt;
<br/>
&lt;/html:form&gt;
&lt;/html:html&gt;

E o resultado é que ele mostra na tela tipo...

1 - fulano

Como se tivesse no id 1 o fulano adicionado... ele traz do banco e mostra na tela entedeu?

Criado 16 de julho de 2008
Ultima resposta 16 de jul. de 2008
Respostas 8
Participantes 3