Erro com DispatchAction

5 respostas
cu_ringa

Tava lendo o Livro Struts em Ação, e nele mstra que quando tenho um formulario com varios botoes, tem varias formas de informar ao ActionServlet qual o botao eu selecionei, bem a melhor maneira q achei foi usando a classe DispatchAction. olhe o codigo dela:

package app;

import org.apache.struts.actions.*;
import org.apache.struts.action.*;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class CadastrarDispacthAction extends DispatchAction{
	
	
	public ActionForward cadastrar(ActionMapping map, ActionForm form, HttpServletRequest req,
																 HttpServletResponse res) throws IOException, ServletException{
		
		PrintWriter out = res.getWriter();
		
		out.print("cadastrar");
																 	
		return map.findForward("sucesso");
		
	}
	
	public ActionForward alterar(ActionMapping map, ActionForm form, HttpServletRequest req,
																 HttpServletResponse res) throws IOException, ServletException{
		
		PrintWriter out = res.getWriter();
		
		out.print("alterar");
																 	
		return map.findForward("sucesso");
		
	}
	
	public ActionForward excluir(ActionMapping map, ActionForm form, HttpServletRequest req,
																 HttpServletResponse res) throws IOException, ServletException{
		
		PrintWriter out = res.getWriter();
		
		out.print("excluir");
																 	
		return map.findForward("sucesso");
		
	}		

}

o metodo escolhido e passado através do parametro parameter da tag action, o o valor method é passado através do formulario. O problema é o seguinte, quando coloco a tag forward aninhada a actio da erro, mas como faço entao para quando o metodo cadastrar for chamado(classe CadastrarDispatchAction) retorne um ActionForward encaminhando para outra pagina?

<action path="/cadastrar-empresa" forward="/jsp/cad_empresa.jsp" />
        <action path="/cadastrar_empresa" 
        				type="app.CadastrarDispacthAction" 
        				name="cadastrarEmpresaForm"
        				scope="request"
        				validate="true" 
        				input="/cadastrar-empresa.do"
        				parameter="method">
        				        	
        	<forward name="sucesso" path="/jsp/Welcome.jsp" />
        </action>

parte do formulario

<tr>
		    <td width="375"><div align="right">
		      <html:submit styleClass="botao" property="method"><bean:message key="botao.cadastrar" /></html:submit></div></td>
		   	<td width="126"><div align="center">
		      <html:submit styleClass="botao" property="method"><bean:message key="botao.alterar" /></html:submit></div></td>
		    <td width="329"><html:submit styleClass="botao" property="method"><bean:message key="botao.excluir" /></html:submit></td>
		  </tr>

erro q ta dando

exception 

javax.servlet.ServletException: Cannot create rewrite URL: java.net.MalformedURLException: Cannot retrieve ActionForward named logon
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:845)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:778)
	org.apache.jsp.jsp.Welcome_jsp._jspService(org.apache.jsp.jsp.Welcome_jsp:114)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

javax.servlet.jsp.JspException: Cannot create rewrite URL: java.net.MalformedURLException: Cannot retrieve ActionForward named logon
	org.apache.struts.taglib.html.LinkTag.calculateURL(LinkTag.java:479)
	org.apache.struts.taglib.html.LinkTag.doStartTag(LinkTag.java:334)
	org.apache.jsp.jsp.Welcome_jsp._jspx_meth_html_link_0(org.apache.jsp.jsp.Welcome_jsp:231)
	org.apache.jsp.jsp.Welcome_jsp._jspService(org.apache.jsp.jsp.Welcome_jsp:98)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

5 Respostas

jgbt

vc não ta dando uma value para o parametro.
faça um teste, crie 3 funções js e cada botão chama uma delas.
dentro delas faça:

document.form[0].action="suaAction.do?method=seuMetodo";
document.forrm[0].submit();

isso deve funcionar.

[]'s

cu_ringa

eu tô passando um valor para o parameter

parameter="method"

quando faço isso

<html:submit styleClass="botao" property="method"><bean:message key="botao.cadastrar" /></html:submit>

significa que o parametro method vai receber o valor do botao, no caso botao.cadastrar=cadastrar no application.properties

olhe com esta a url quando clico no botao cadastrar, olhe bem o final. http://localhost:8080/invent_estoque/cadastrar_empresa.do;jsessionid=38599925892A313857558EC2BB172092?cnpj=00.000.000%2F0000-00&razaosocial=p&nomefantasia=p&rua=p&numero=0000&bairro=p&cidade=p&uf=pi&method=cadastrar

cu_ringa

eu nao entendo e o seguinte, se os metodos da classe CadastrarDispacthAction todos retornam um objeto ActionForward pq eu n tou podendo pegar esse objeto e colocar ele no forward aninhado do action:

<action path="/cadastrar-empresa" forward="/jsp/cad_empresa.jsp" />
         <action path="/cadastrar_empresa" 
         				type="app.CadastrarDispacthAction" 
         				name="cadastrarEmpresaForm"
         				scope="request"
         				validate="true" 
         				input="/cadastrar-empresa.do"
         				parameter="method">
         				        	
         	<forward name="sucesso" path="/jsp/Welcome.jsp" />
         </action>

eu digo q oerro ta por aí, pq qnd tiro a tag

<forward name="sucesso" path="/jsp/Welcome.jsp" />

ele funciona blz, mas eu preciso fazer com q o resultado do metodo cadastrar da classe CadastrarDispacthAction, leve a minha aplicação para outra pág p mim poder fazer a classe do banco.

quem tiver alguma ideia, palpite.

cu_ringa

ei deu certo é pq acho o Welcome.jsp tava dando conflito com alguma coisa

<forward name="sucesso" path="/jsp/Welcome.jsp" />

pq quando substitui por

<forward name="sucesso" path="/success.html" />

funcionou blz.

sera q tava dando conflito pq o meu

cu_ringa

ei deu certo é pq acho o Welcome.jsp tava dando conflito com alguma coisa

<forward name="sucesso" path="/jsp/Welcome.jsp" />

pq quando substitui por

<forward name="sucesso" path="/success.html" />

funcionou blz.

sera q tava dando conflito pq o meu tem um com o path Welcome.do, é a única coisa no meu struts-config q tem Welcome???

<global-forwards>
        <!-- Default forward to "Welcome" action -->
        <!-- Demonstrates using index.jsp to forward -->
        <forward
            name="welcome"
            path="/Welcome.do"/>
    </global-forwards>
Criado 9 de março de 2005
Ultima resposta 10 de mar. de 2005
Respostas 5
Participantes 2