Pessoal, estou trabalhando num projeto aonde está sendo utilizado Tiles na definição do Layou. Criei no struts config uma action com a seguinte descrição:
<action
attribute="cadastroVistoriadorForm"
parameter="metodo"
input="/WEB-INF/pages/DadosVistoriador.jsp"
path="/cadastrarVistoriador"
name="cadastroVistoriadorForm"
scope="request"
type="br.com.abnc.detnet.renach.action.CadastrarVistoriadorAction">
<forward name="SucessoInsere" path="cadastrarVistoriador" />
</action>
O arquivo de definição do Tiles possui o seguinte conteúdo:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
<tiles-definitions>
<!-- Template para o Módulo Administração -->
<definition name="templateAdministracao" extends="template">
<put name="estilo" value="estilo-administracao.css"/>
<put name="titulo" value="Módulo Administração"/>
<put name="topo" value="/WEB-INF/pages/templates/Topo.jsp?modulo=administracao"/>
<put name="menu" value="/WEB-INF/pages/templates/Menu.jsp?modulo=administracao"/>
<put name="rodape" value="/WEB-INF/pages/templates/Rodape.jsp?modulo=administracao"/>
</definition>
<definition name="cadastrarVistoriador" extends="templateAdministracao">
<put name="conteudo" value="/WEB-INF/pages/administracao/DadosVistoriador.jsp"/>
</definition>
</tiles-definitions>
Como podem reparar, no forward do meu action aponta para a definição “cadastrarVistoriador”, da minha página. Só que quando este forward é chamado, ocorre o seguinte erro:
java.lang.IllegalArgumentException: Path cadastrarVistoriador does not start with a "/" character
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Alguém teria ideia do que pode estar acarretando o problema?
O Tiles está configurado corretamente como um plugin do Struts?
Porque quem está fazendo o chamado é o request processor normal do Struts.
No struts config foi informado o seguinte código para configurar o plugin do Tiles:
<plug-in className="org.apache.struts.tiles.TilesPlugin" >
<set-property property="definitions-config"
value="/WEB-INF/tiles-template.xml,
/WEB-INF/tiles-sessao.xml" />
<set-property property="moduleAware" value="true" />
</plug-in>
Isto está correto, certo?
Aparentemente está, mas faça o seguinte, coloque mais isso:
<set-property property="definitions-debug" value="2" />
<set-property property="definitions-parser-details" value="2" />
<set-property property="definitions-parser-validate"
value="true" />
Veja o que ele mostra nos logs… eu to achando que isso pode ser um problema de herança com esse “template” que não está definido nesse arquivo de configuração. Esse “template” está definido em qual dos arquivos de configuração do Tiles? O primeiro ou o segundo?
Infelizmente não funcionou.
Quanto ao template, ele está definido no primeiro arquivo. Abaixo segue a descrição deste arquivo:
<tiles-definitions>
<!-- layout de Página usada como base para todas as outras. -->
<definition name="template" path="/WEB-INF/pages/templates/Template.jsp">
<put name="estilo" value=""/>
<put name="titulo" value=""/>
<put name="topo" value=""/>
<put name="menu" value=""/>
<put name="rodape" value=""/>
<put name="conteudo" value=""/>
</definition>
</tiles-definitions>
Eu vou estar dando uma olhada no log para ver se descubro algo. Mais caso tenha alguma outra idéia, ela será bem vinda .
Ao invés de
path="/cadastrarVistoriador"
tente colocar
path="cadastrarVistoriador"
(sem a /)
Olá vivi,
no caso o que tem a barra é a minha action, e no mapeamento da action tem que vir a barra. O que eu notei ontem é que o nome da minha action e da chamada da página no Tiles eram iguais. Por isso modifiquei a nomenclatura, usando um padrão que ví o pessoal utilizando, usando palavras seguidas na frente que identifiquem aquela página, sucedido de um ponto e o nome da página em si. Assim evita repetição de nomes.
Mesmo assim, não funcionou. Continua ocorrendo o mesmo erro.
Pessoal, valeu pelas dicas até aqui. Se alguém tiver mais alguma ideia, por favor postem aqui. Estou procurando a solução deste problema na net, mais até agora não achei nada.
Mauricio, olhei o LOG, mais não encontrei nenhuma informação util.
Poste como ficou o seu struts-config e o seu tiles por favor…
e se o erro mudou, poste ele tb
Pessoal, já descobri o erro.
E para variar foi ocasionado por uma ligeira falta de atenção. :?
Bom, explicando o problema: No projeto do qual estou participando, decidimos criar vários arquivo struts-config, um para cada módulo, para ficar melhor organizado.
Só que por uma bobeada, foi esquecido de se declarar o arquivo strutus-config principal, aonde está as configurações padrões do projeto incluindo a declaração do plugin do tiles, no arquivo web.xml. Estava declarado todos os sub-arquivos, menos este principal.
Bom, mais isto acontece. Os maiores problemas costumam residir nos erros mais simples
Pessoal, agradeço por toda ajuda e orientação. Valeu mesmo pela ajuda.