Alguém me ajuda com o struts 2?

7 respostas
carol_programadora
Oi a todos, um amigo do trabalho me informou deste fórum e falou que aqui é muito bom. Estou tentando fazer um exemplo de struts 2 porque aqui no trabalho mexem muito com ele, mas eu só mexi até hoje com jsf, e não sei nada de struts. Peguei uns exemplos pela internet, e todos os dois que tentei não consegui e da mesmo erro sempre. olham como acontece:
There is no Action mapped for namespace / and action name index. - [unknown location]
	at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
importei todos os jars necessarios, na hora que digito index.action da esse erro. meu struts.xml está assim vejam:
<package name="myPackage" namespace="/" extends="struts-default">
	             <action name="index" class="br.com.actions.IndexAction">
        			<result>/jsp/index.jsp</result>
        		</action>
        		<action name="helloWorld" class="br.com.actions.helloWorldAction"> 
					<result name="input">/jsp/index.jsp</result>
					<result>/jsp/helloWorld.jsp</result>
				</action>
       	</package>
minha index do root que eu chamo só tem isso dentro:
<% response.sendRedirect("index.action"); %>
e minha outra index dentro de /jsp/index.jsp
..
<body>
	<s:form action="helloWorld">
		<s:textfield label="What is your name?" name="name" />
		<s:textfield label="What is the date?" name="dateNow" />
		<s:submit />
	</s:form>
</body>...
e meu método da IndexAction:
public class IndexAction extends ActionSupport {    
                private static final long serialVersionUID = 1L;
	private Date now = new Date(System.currentTimeMillis());
    
    @TypeConversion(converter = "net.fratech.s2.DateConverter")
    public Date getDateNow() { return now; }
    
    public String execute() throws Exception {
        now = new Date(System.currentTimeMillis());
        return SUCCESS;
    }
}

quem tiver tempo pra me ajudar eu ficaria muito grata.
Obrigada.
Carol.

7 Respostas

carol_programadora

e queria dizer que o meu struts.xml está nesta pasta WEB-INF/struts.xml.
coloquei ai porque esse exemplo mostrava aí nesta pasta.

marcosharbs

ele nao esta achando sua action pelo jeito
no atributo name da action la no seu struts-config vc deve bota o nome do form ao qual a action faz referencia, o nome pelo qual vc chama a action deve estar no atributo path, ai no seu jsp la no <s:form action=""> vc deve colocar oque vc definiu no atributo path da action tp path="/inserirFornecedor" no form vc bota action=“inserirFornecedor.do”, isso se vc definiu no seu web.xml a entensao como .do

marcosharbs

Segue um exemplo abaixo:

este é meu form:

<form-beans>
		<form-bean name="alunoForm"
			type="org.apache.struts.validator.DynaValidatorForm"
			dynamic="true">
			<form-property name="selectedItems"
				type="java.lang.String[]" />
			<form-property name="dscAcao" type="java.lang.String" />
			<form-property name="nome" type="java.lang.String" />
			<form-property name="nome_novo" type="java.lang.String" />
			<form-property name="telefone" type="java.lang.String" />
			<form-property name="endereco" type="java.lang.String" />
			<form-property name="fase" type="java.lang.String" />
			<form-property name="periodo" type="java.lang.String" />
		</form-bean>
	</form-beans>

eu declarei ele no struts config.xml, mas vc pode fazer uma classe para seu form e da extends de ActionForm.

avaixo o codigo de uma action:

<action name="alunoForm" path="/inserirAluno"
			parameter="dscAcao" scope="session" type="Actions.AlunoActions"
			input="/Inserir_Aluno.jsp" validate="true">
			<forward name="sucesso" path="/Principal.jsp" />
			<forward name="falha" path="/Inserir_Aluno.jsp" />
		</action>

e no meu jsp fica assim:

<html:form action="/inserirAluno" >
joaorafael

Tem que ver como que esta o seu web.xml

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

    <filter>
        <filter-name>struts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        <init-param>
        	<param-name>actionPackages</param-name>
        	<param-value>com.mycompany.myapp.actions</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>struts</filter-name>
        <url-pattern>/*</url-pattern> <!-- Aqui está o que o struts vai interceptar. Neste Exemplo vai interceptar tudo -->
    </filter-mapping>

    <!-- ... -->

</web-app>

No seu Struts.xml tem que ser assim:

<action name="NomeDaAction" class="CaminhoDaClasseDaAction">    
     <result name="success">/nomeDaPaginaSerMostrada.jsp</result>  
     <result name="erro">/nomeDaPaginaDeErroASerMostrada.jsp</result>
</action>

Verifique estes arquivos.

Ao inves de digitar “index.action”
tente digitar na URL: IndexAction!execute

F

Coloca seu struts.xml dentro de WEB-INF/classes…

carol_programadora

Oi Marcos,

mas este ActionForm que você sugeriu extender, não é do struts antigo? ou estou enganada?
preciso fazer isso no Struts 2?

carol_programadora

oi pessoal consegui rodar!!!

meu struts.xml estava dentro de web-inf, como foi falado pra colocar em web-inf/classes, mas no projeto não tinha essa pasta /classes, só tinha /lib, então coloquei o struts.xml na pasta src junto das classes e ai rodou legal.
Obrigada a todos vocês, quando eu tiver dúvidas de novo vou incomodar vocês viu!!??

bjos, Carol.

Criado 26 de setembro de 2008
Ultima resposta 26 de set. de 2008
Respostas 7
Participantes 4