(Struts) O que deu errado?

Pessoal eu continuo com o erro descrito abaixo:

There is no Action mapped for action name HelloWorld. - [unknown location]
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:497)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)

Eu estou seguindo um exemplo de um tutorial, e ele por enquanto não me pediu para criar o struts-config.xml só o struts.xml é a mesma coisa?
Meu struts.xml está assim:

<?xml version="1.0" encoding="UTF-8"?> /HelloWorld.jsp

criei essa classe como pediram:

package pacote;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport {
public static final String MESSAGE = “Struts is up and running”;
public String execute() throws Exception{
setMessage(MESSAGE);
return SUCCESS;
}
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

no web.xml coloquei o seguinte filtro:

struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*

e o meu jsp está assim:

<%@ taglib prefix=“s” uri="/struts-tags" %>

Insert title here

Será que eu coloquei o struts.xml em lugar errado? Em que pasta devo colocá-lo?

desde já agradeço pela atenção!

Tente colocar os códigos dentro da tag code do forum, fica mais facil a visualização

Eu não olhei bem seu código, mas respondendo sua perguntaP o struts.xml deve ficar dentro do WEB-INF/classes

Olha um exemplo de helloworld, bem parecido com o que você está tentando, aqui: http://www.jroller.com/jrjunior/entry/struts_2_getting_started_part

Cara…você precisa SIM do struts-config, e é justamente este o erro que esta dando…ele não esta mapeando sua Action.
O struts-config seria algo mais ou menos assim:

struts-config.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?&gt;

&lt;!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"&gt;
          
&lt;struts-config&gt;
  &lt;form-beans&gt;
    &lt;form-bean name="LoginForm" type="com.br.struts.form.LoginForm"/&gt;
  &lt;/form-beans&gt;
   
  
   
  &lt;action-mappings&gt;      

    
    &lt;action path="/HelloWorld" scope="request" type="com.br.struts.action.HelloWorld"&gt;
 			&lt;forward name="sucesso" path="/suaJSP.jsp" redirect="true"/&gt;
    &lt;/action&gt;
    
 &lt;/action-mappings&gt;

 	     
&lt;/struts-config&gt;

o web.xml tem que conter as notações:

 &lt;servlet&gt;
    &lt;servlet-name&gt;action&lt;/servlet-name&gt;
    &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;
    &lt;init-param&gt;
      &lt;param-name&gt;config&lt;/param-name&gt;
      &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;init-param&gt;
      &lt;param-name&gt;debug&lt;/param-name&gt;
      &lt;param-value&gt;1&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;init-param&gt;
      &lt;param-name&gt;detail&lt;/param-name&gt;
      &lt;param-value&gt;1&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;
  &lt;/servlet&gt;

  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;action&lt;/servlet-name&gt;
    &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;
  

	&lt;welcome-file-list&gt;
		&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
	&lt;/welcome-file-list&gt;

espero ter ajudado

para facilitar, utiliza o struts-blank, que ele ja vem com o default configurado e ainda tem os comentários para você entender o que se passa…

ManchesteR, muito obrigado pelo link e pela ajuda, mas ainda está dando erro, eu fiz como está no link que você me falou também e coloquei o struts.xml dentro do web-inf.

rockStorm: o struts.xml é o próprio struts-config.xml, porém o struts.xml é a versão do struts 2 que parece ser mais fácil. você tem que usar novo dtd.

There is no Action mapped for namespace / and 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.dispatcher.Dispatcher.serviceAction(Dispatcher.java:497) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:619)

Bom, não sei o que fazer, vou continuar tentando arrumar o erro, se descobrirem o erro por favor me falem!

MaschesteR: você chegou a fazer aquele exemplo e deu certo?

galera será que eu não tenho que especificar no web.xml o struts.xml como o nosso amigo falou?
aí está sendo especificado o struts-config.xml como param-value.

<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>1</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>1</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet>

Sim, aquele era meu antigo blog :wink:

Eu acabei de fazer o mesmo exemplo usando os dados do blog (menos o web.xml que eu modifquei, tirei alguns dados do filter que são usados em mapemento de annotations).

Eu zipei o projeto e o link para download ele está ai. http://www.jrjuniorsp.xpg.com.br/Struts2Examle.zip (menos as libs que eu tirei)

Espero que te ajude agora.

Nossa, valeu mesmo!!!
vou testar agora!!

Funcionoooouuu!!!
o erro foi seguinte:
aonde eu estou retornando a string success ela estava sendo passada sem ser string por exemplo
SUCCESS, sendo que deveria ser “success” que é o nome que eu coloquei no struts.xml em result!
valeu pela ajuda galera, agora posso almoçar tranqüilo!!!

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport {
	private static final long serialVersionUID = 1L;
	public String execute() throws Exception{
		setMessage("Hello World");
		System.out.println("estou aqui"+ SUCCESS);
		return "success";	
	}
	private String message;
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
}

De qualquer modo te aconselho a usar o struts-blank para facilitar o seu aprendizado.

Abraço