Struts 2: action não executa

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:

<?xml version="1.0" encoding="UTF-8"?>

[code]

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

[/code]

minha action:

[code]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;
	}
	}[/code]

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

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.

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!

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

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!

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, 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!

[quote=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![/quote]

Apenas complementando,

[code]Struts1 -> class NomeClasse extends Action{}

Struts2 -> class NomeClasse extends ActionSupport{}[/code]

[quote=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)[/quote]

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…

[quote=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:

<?xml version="1.0" encoding="UTF-8"?>

[code]

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

[/code]

minha action:

[code]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;
	}
	}[/code][/quote]

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

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

[code]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;
	}
	}[/code]

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

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

Vc colocou index.jsp como resultado do success?

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

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

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:

[code]<?xml version="1.0" encoding="UTF-8"?>

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

[/code]

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")})