Url-pattern Struts2

7 respostas
D

Olá pessoal. Tudo bem?!

Estou com o seguinte problema: preciso mapear meu filter do Struts2 para interceptar as requisições a partir de “/gm2/" ao invés do abtual "/”.

Se eu colocar “/" a aplicação funciona normal, portanto não há erros de configurações em outros locais. Porém com "/gm2/” a aplicação lança a seguinte exceção:

There is no Action mapped for action name novo. - [unknown location]

com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)

As url utilizadas foram:

1- para o pattern “/*” e que está funcionando
http://localhost/notaFiscal/listagem.action

2- para o pattern “/gm2/*” e que NÃO está funcionando
http://localhost/gm2/notaFiscal/listagem.action

Alguém sabe pq não está funcionando?

Desde já agradeço,

7 Respostas

bbviana

coloca o seu struts.xml aqui pra gente ver como vc mapeou

D

O struts.xml tá normal:

&lt?xml version="1.0" encoding="UTF-8" ?&gt
<!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="true" />
	
	<package name="ANotaFiscal" namespace="/notaFiscal" extends="struts-default">
		<result-types><result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/></result-types>
		<action name="*" method="{1}" class="apresentacao.ANotaFiscal">
			<result type="tiles" name="listagem">notaFiscal.listagem</result>
		</action>
	</package>
</struts>

O único detalhe é que estou usando Tiles. Mas estava tudo funcionando beleza. A questão é que agora eu preciso de que todos os meus actions tenham um "/gm2" antes do nome do package.

Tentei colocar esta configuração dentro do web.xml, mas não deu certo:

<filter>
	<filter-name>struts2</filter-name>
	<filter-class>
	org.apache.struts2.dispatcher.FilterDispatcher
	</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/gm2/*</url-pattern>
</filter-mapping>

Vc sabe dizer por quê?!

v1c70r_f

Amigo, o que você precisa é configurar seu ‘context-root’ para gm2, aí você não precisaria colocar gm2 em nenhuma action, sua plicação continuaria funcionando normalmente, apenas com o gm2\ no caminho na sua url…

D

E ai Victor. Tudo bem?

Cara… não entedi muito bem o que você quis dizer com mudar o context-root para gm2. Você poderia dar uma clariada pra mim?! =]

Desde já agradeço a ajuda. Até.

v1c70r_f

Opa, blzinha!

Então carinha, no seu projeto deve ter um arquivo chamado application.xml, nesse descritor da sua aplicação ficam os seus projetos e lah provavelmente tem uma tag web que provavelmente também terá uma tag , onde se não me engano significa o contexto padrão da sua aplicação web…

ex.:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
<application id="Application_ID">
	<display-name>teste_service</display-name>
	<module id="EjbModule_1133202397087">
		<ejb>teste_serviceEJB.jar</ejb>
	</module>
	<module id="WebModule_1133202397103">
		<web>
			<web-uri>teste_serviceWeb.war</web-uri> <!-- .war do seu projeto web !-->
			<context-root>gm2</context-root>  <!-- <<<<<<<< esse é o seu contexto padrao  !-->
		</web>
	</module>
</application>

Estou acostumado a usar uma workspace padrao aqui no servico, eh um workspace gerado no WSAD nao sei no eclipse e outros se eh tudo igual, mas acredito que a hierarquia de pastas seja algo padrao…

dê uma olhada em alguma pasta ‘META-INF’ na sua aplicacao…

acho que ficou um pouco confuso neh xD, nao sou muito bom de conceito, faço muito crtl+c , crtl+v sabe, mas se tiver mais duvidas posta ai que tambem procuro aprender mais hehe xD

Abraço carinha

v1c70r_f

provavelmente seu contexto deve estar como ‘notaFiscal’, é só alterar para ‘gm2/notaFiscal’

D

Ah tá… bem…

Na minha applicação não tem este arquivo application.xml não. E bem… o meu contexto está definido como o raiz do host, ou seja, meu diretório de contexto está mapeado em “http://localhost/”. No caso o “notaFiscal” da URL é o namespace do struts2 e o “listagem.action” o Action =D.

A única coisa que eu tentei fazer foi alterar o web.xml onde eu mapeio o filter do Struts. Mas não adiantou. Não dá pra eu alterar o contexto da minha aplicação, pois já existe uma parte do sistema que exige que o contexto se mantenha o mesmo.

A única solução paleativa que eu achei para este problema foi mapear meus namespaces lá no Struts.xml como “/gm2/notaFiscal” ao invés de “/notaFiscal”. Tá funcionando. Mas não queria que tivesse que colocar este “/gm2” para cada um dos meus namespaces.

Mas tá tranqüilo… valeu pela ajuda! =]

Criado 30 de agosto de 2007
Ultima resposta 3 de set. de 2007
Respostas 7
Participantes 3