Struts 2: action não executa

18 respostas
Marcio_Nogueira

Olá, estou tendo o seguinte problema:
minha action não está sendo executada, algém poderia dar uma dica de como resolver este problema?

Segue o código de meu struts.xml:

<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.devMode" value="true" />

	<packege name="default" extends="struts-default"> 
		<!-- mapeamento das actions da aplicação -->
		<action name="HelloWorld" class="action.HelloWorldAction">    
			<param name="method"/>
			<result name="success">/success.jsp</result>     
		</action>
	</packege>	
</struts>
minha action:
package action;


public class HelloWorldAction{

	private static final long serialVersionUID = 1L;
	
	private String mensagem;
	
	public String testa() throws Exception {
		this.setMensagem("Hello World com Struts 2" );
		return "SUCCESS";
		
	}

		public String getMensagem() {
		return this.mensagem;
		}

		public void setMensagem(final String mensagem) {
		this.mensagem = mensagem;
		}
		}

18 Respostas

drigo.angelo

Será que o retorno do mapeamento é Case-Sensitive?

Marcio_Nogueira

Creio que não, pois estava utilizando o retorno tal qual mapeado e a action não executava da mesma forma. A alteração do retorno em caixa-baixa foi para ver se o erro iria persistir.

newbcc

Olá,

ao invés de usar a tag result tente usar esta <forward name="iniciar" path="/pages/contato_form_s.jsp" />. Só para testar realmente.

E quanto a questão do drigo, acredito que não seja por causa da caixa, porque tenho mapamentos desse tipo, caixas trocadas, em um projeto recente. Então acho que ainda não é esse o problema.

Abs!

Marcio_Nogueira

Infelizmente não funcionou, a action continua não executando.
O mapeamento possui algum erro?

newbcc

Oi Marcio,

parece que o seu mapeamento no struts-config está correto. Pelo o quê eu vi, a sua Action tem que herdar de extends ActionSupport

Faz essa herança e tenta novamente.

Opa, e tem outra coisa, na sua Action você tem que sobre-escrever o método public String execute() throws Exception

Abs!

B

Olá,

Será que não é a diferença do arquivo XML para o retorno?
Repare que no xml está em minúsculo (success) e no método em maiúsculo (SUCCESS)

newbcc

Não, como disse antes, eu tenho essas diferenças em um projeto recente e não faz nenhuma diferença.

E outra, tem de ser SUCCESS, INPUT ou ERROR. Estes são constantes, e não objeto String, encontradas no framework da versão 2, que é a versão que ele está usando.

Abs!

A
newbcc:
Oi Marcio, parece que o seu mapeamento no struts-config está correto. Pelo o quê eu vi, a sua Action tem que herdar de
extends ActionSupport

Faz essa herança e tenta novamente.

Opa, e tem outra coisa, na sua Action você tem que sobre-escrever o método
public String execute() throws Exception

Abs!

Apenas complementando,

Struts1 -> class NomeClasse extends Action{}

Struts2 -> class NomeClasse extends ActionSupport{}
A

bffermino:
Olá,

Será que não é a diferença do arquivo XML para o retorno?
Repare que no xml está em minúsculo (success) e no método em maiúsculo (SUCCESS)

Não acredito que faça diferença pois quando você usa SUCCESS na classe action do Struts2 está usando o atributo estático e quando usa
“success” ele sabe que tende linkar com o success…

Corrijam-me se eu estiver errado…

A
Marcio_Nogueira:
Olá, estou tendo o seguinte problema: minha action não está sendo executada, algém poderia dar uma dica de como resolver este problema?

Segue o código de meu struts.xml:

<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.devMode" value="true" />

	<packege name="default" extends="struts-default"> 
		<!-- mapeamento das actions da aplicação -->
		<action name="HelloWorld" class="action.HelloWorldAction">    
			<param name="method"/>
			<result name="success">/success.jsp</result>     
		</action>
	</packege>	
</struts>
minha action:
package action;


public class HelloWorldAction{

	private static final long serialVersionUID = 1L;
	
	private String mensagem;
	
	public String testa() throws Exception {
		this.setMensagem("Hello World com Struts 2" );
		return "SUCCESS";
		
	}

		public String getMensagem() {
		return this.mensagem;
		}

		public void setMensagem(final String mensagem) {
		this.mensagem = mensagem;
		}
		}

Marcio, acredito que você deveria herdar o método execute... Aliás, vc está usando qual versão do Struts?

Marcio_Nogueira
Segue a alteração feita na minha action, mas o problema continua, ou seja, a action não é executada.
package action;

import com.opensymphony.xwork2.ActionSupport;


public class HelloWorldAction extends ActionSupport{

	private static final long serialVersionUID = 1L;
	
	private String mensagem;
	
	public String execute() throws Exception {
		setMensagem(mensagem = "Olá mundo com Struts 2");
		return "SUCCESS";
		
	}

		public String getMensagem() {
		return this.mensagem;
		}

		public void setMensagem(final String mensagem) {
		this.mensagem = mensagem;
		}
		}
A

<action name="[b]nomDaAction[/b]" class="[b]pacote.classe[/b]" method="execute"> <result type="success">[b]/nomeDoJSP.jsp[/b]</result> </action>

Mude sua action para a de cima só pra testar…

Marcio_Nogueira

Fiz a alteração conforme sugerida, porém, o resultado apresentado é apenas o jsessionid:http://localhost:8080/struts2/index.jsp;jsessionid=C0A71ADDA0C1581DB927D78465110E59

A

Vc colocou index.jsp como resultado do success?

Marcio_Nogueira

Não, coloquei success.jsp que é a página a qual a action irá redirecionar.

Marcio_Nogueira

Além do problema da action não estar sendo executada, o componente <s:property /> não é renderizado.

Marcio_Nogueira
Consegui fazer com que minha action seja executada, porém, gera o seguinte erro:
There is no Action mapped for action name helloworld. - [unknown location]
	at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
	at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
	at org.apache.struts2.components.ActionComponent.executeAction(ActionComponent.java:249)
	at org.apache.struts2.components.ActionComponent.end(ActionComponent.java:155)
	at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:43)
	at org.apache.jsp.index_jsp._jspx_meth_s_005faction_005f0(index_jsp.java:209)
	at org.apache.jsp.index_jsp._jspx_meth_s_005fsubmit_005f0(index_jsp.java:178)
	at org.apache.jsp.index_jsp._jspx_meth_s_005fform_005f0(index_jsp.java:116)
	at org.apache.jsp.index_jsp._jspService(index_jsp.java:75)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:416)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
meu struts.xml:
<?xml version="1.0" encoding="UTF-8"?>

<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<constant name="struts.devMode" value="true" />

	<packege name="action" extends="struts-default"> 
		<!-- mapeamento das actions da aplicação -->
		<action name="helloworld" class="action.HelloWorldAction" method="execute">
			<s:param name="method"/>
			<result type="success">/success.jsp</result>
		</action>
	</packege>	
	
</struts>
aquino.vale

coloque em cima da função que vc quer chamar.use a anotação @Action somente para Structs2 e tenta novamente, lembrando que os arquivos .jsp devem ficar dentro da pasta content, caso fiquem na pasta principal utilizar a barra invertida…

@Action(value="nomedaAction", results={@Result(name="ok", location="usuario-cadastrado.jsp"),
									@Result(name="input", location="cadastrar.jsp")})
Criado 7 de fevereiro de 2011
Ultima resposta 21 de abr. de 2011
Respostas 18
Participantes 6