(Struts) O que deu errado?

10 respostas
Thiagoprudente

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!

10 Respostas

Jair_Rillo_Junior

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

rockstorm

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="1.0" encoding="ISO-8859-1" ?&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

sudeval

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…

Thiagoprudente

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!

Thiagoprudente

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

Thiagoprudente

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>

Jair_Rillo_Junior

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.

Thiagoprudente

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

Thiagoprudente

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;
	}
}
falvesti

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

Abraço

Criado 23 de novembro de 2007
Ultima resposta 23 de nov. de 2007
Respostas 10
Participantes 5