Struts 2 - como chamar minha action

15 respostas
L

Pessoal conheço o struts 1.3, agora estou tentando aprender o 2.0 e estou apanhando um pouco.

qdo tento acessar minha action gera esta exception:
There is no Action mapped for namespace / and action name inicial. - [unknown location]

na verdade não sei como acessar a minha action, estou tentando assim:
http://localhost:8082/struts2/inicial.action

segue o struts-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

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

	<package name="struts2" namespace="/" extends="struts-default">

		<action name="inicial" class="br.com.struts2.action.login.Inicial" method="{1}">
			<result>
				/struts2/web/WEB-INF/pages/jsp/login/inicial.jsp
			</result>
		</action>

	</package>
</struts>

minha action

package br.com.vivo.struts2.action.login;

import com.opensymphony.xwork2.ActionSupport;

public class Inicial extends ActionSupport {

	private static final long serialVersionUID = -7469788121140371129L;

	public void minhaAction() {
		System.out.println("minha action");
	}

}

como chamar?

15 Respostas

J

Testa desta maneira:
http://localhost:8082/struts2/inicial!minhaAction.action

Você esqueceu de passar o nome do método que você quer que a action execute.
Quando você coloca este parâmetro “method=”{1}"" na action você esta dizendo para o Struts usar um método da Action, se estivesse sem este parâmetro você teria que ter na sua action o método execute.

L

Tentei mas a exception continuou…

Ele esta reclamando do namespace… nao entendi muito bem para que ele serve…
Olhe como ele esta…

<package name="struts2" namespace="/" extends="struts-default">

vlw

J

Desculpa :smiley: , tem mais um detalhe que tem que colocar no struts.xml, coloca esta linha:

//Esta linha tem que mudar
//<action name="inicial" class="br.com.struts2.action.login.Inicial" method="{1}">
//Coloca desta maneira
<action name="inicial!*" class="br.com.struts2.action.login.Inicial" method="{1}">

E chama desta maneira: http://localhost:8082/struts2/inicial!minhaAction.action

Ve se funciona…

L

Coloquei… mas o erro continuou…

Será que nao é o namespace do package?

J

Acredito que não.
Você poderia colocar a sua estrutura de diretórios? E colocar novamente o struts.xml? E coloca a exception também, por favor.

L

claro…

meu struts-config esta no JavaSource.

struts-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

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

	<package name="struts2" namespace="/" extends="struts-default">

		<action name="inicial!*" class="br.com.struts2.action.login.Inicial" method="{1}">
			<result>
				/struts2/web/WEB-INF/pages/jsp/login/inicial.jsp
			</result>
		</action>

	</package>
</struts>

action

package br.com.struts2.action.login;

import com.opensymphony.xwork2.ActionSupport;

public class Inicial extends ActionSupport {

	private static final long serialVersionUID = -7469788121140371129L;

	public void minhaAction() {
		System.out.println("??");
		System.out.println("??");
		System.out.println("??");
	}

}
R

Amigo da uma olhada neste material:

http://www.roseindia.net/struts/struts2/index.shtml

Flw

L

Entao caras…

To até com um livro aq em pdf…
mas meu inglês não está bom.

J

O nome do arquivo de configuração do struts2 é struts.xml era struts-config, quando era o struts 1.x, muda o nome do arquivo este pode ser o problema, o struts não está achando a configuração, por isso ele fala que não está configurado e este arquivo tem ficar dentro do diretório WEB-INF/classes.

L

mudei o nome para struts.xml…
mas nao consegui arrumar o erro ainda.

O struts.xml encontrase sim no mesmo lugar das .class

oq pode ser?

J

Coloca o seu web.xml, e a sua estrutura de diretório e coloca o erro que é printado…
E tente colocar as suas páginas html, css, jsp e etc fora do WEB-INF.
Aproveitando coloca o seu struts.xml desta maneira:

<action name="inicial" class="br.com.struts2.action.login.Inicial">

E muda o nome do método da action de minhaAction para execute, desta maneira:

package br.com.struts2.action.login;

import com.opensymphony.xwork2.ActionSupport;

public class Inicial extends ActionSupport {

	private static final long serialVersionUID = -7469788121140371129L;

	public void execute() throws Execption {
		System.out.println("??");
		System.out.println("??");
		System.out.println("??");
	}

}

E chama a action desta maneira: http://localhost:8082/struts2/inicial.action
Lembrando que este método manda printar as strings no console do Tomcat, ou seja, a saída será printada no catalina.out.

L

FUNCIONOUUUU!!!

com a dica do meu amigo eu acabei avistando outro probleminha…

O endereço de localização do jsp estava errado(result)
antes

#
#         <action name="inicial!*" class="br.com.struts2.action.login.Inicial" method="{1}">  
#             <result>  
#                 /struts2/web/WEB-INF/pages/jsp/login/inicial.jsp  
#             </result>  
#         </action>

agora

<action name="inicial!*" class="br.com.vivo.cdweb.action.login.CdWebInicial" method="{1}">
			<result>
				/WEB-INF/pages/jsp/login/inicial.jsp
			</result>
		</action>

agora eu to tentando colocar a taglib da jstl no web xml ta dando erro… da uma olhada…

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4"
	xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>struts2</display-name>

	<filter>
		<filter-name>action</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>action</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	<!-- TagLibs JSTL -->
	<taglib>
		<taglib-uri>/tags/c</taglib-uri>
		<taglib-location>/WEB-INF/tlds/jstl/c.tld</taglib-location>
	</taglib>

	<taglib>
		<taglib-uri>/tags/x</taglib-uri>
		<taglib-location>/WEB-INF/tlds/jstl/x.tld</taglib-location>
	</taglib>


</web-app>
J

Porque você não usa as taglibs do struts? Dá para fazer bastante coisa e ainda escrever aplicações com Ajax sem escrever javascript…hehehe
Dá uma olhada neste link: http://struts.apache.org/2.0.11.1/docs/tag-developers-guide.html

L

blz vlw estou dando uma olhadinha aq…

Eu sempre usei a tag html, logic entre outras…
estas tb estão presentes no struts2??

ahh pra ajax eu uso dwr
muito bom!!!

vlw

L

tem algum exemplo de taglib nova dos struts 2???
no meu web xml sempre da erro
flw

Criado 16 de julho de 2008
Ultima resposta 16 de jul. de 2008
Respostas 15
Participantes 3