Erro com tiles

21 respostas
M

Pessoal, estou começando a estudar Tiles e achei um Tutorial e ao rodar a aplicação está dando o seguinte erro:

Path aDef does not start with a "/" character

Alguém pode me dizer o que vem a ser este erro ??

Obrigado.

21 Respostas

fabiozoroastro

Oi Marcelo, provavelmente isto é um erro na chamada do arquivo tiles dentro do seu struts-config.xml.

Dê uma olhada se está correto a chamada e/ou poste o código aqui pra tentarmos te ajudar!

M

tileDefinitions:

<?xml version="1.0" encoding="UTF-8"?>
<component-definitions>   
  
    <definition name="baseDef" path="tiles/layout.jsp">   
        <put name="header" value="tiles/header.jsp"/>   
        <put name="footer" value="tiles/footer.jsp"/>   
        <put name="body"   value=""/>   
    </definition>   
  
    <definition name="aDef" extends="baseDef">   
        <put name="body" value="tiles/aBody.jsp"/>   
    </definition>   
  
    <definition name="bDef" extends="baseDef">   
        <put name="body" value="tiles/bBody.jsp"/>   
    </definition>   
  
    <definition name="cDef" extends="baseDef">   
        <put name="body" value="/cBody.jsp"/>   
    </definition>   
  
</component-definitions>

struts-config.xml:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC 
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
           "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
  <action-mappings type="org.apache.struts.action.ActionMapping">
   	<action path="/a"  type="actions.DoFirst">   
    	<forward name="success" path="aDef"/>   
	</action>   
  
	<action path="/b" type="actions.DoFirst">   
	    <forward name="success" path="bDef"/>   
	</action>   
  
	<action path="/c" type="actions.DoFirst">   
	    <forward name="success" path="cDef"/>   
	</action> 
  </action-mappings>
  
</struts-config>

web.xml:

?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
      <web-app>
          <!-- Standard Action Struts Servlet Maping  -->
          <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>definitions-config</param-name>   
			    <param-value>/WEB-INF/tileDefinitions.xml</param-value>   
			</init-param> 
            <load-on-startup>1</load-on-startup>
          </servlet>
          
          <!-- Standard Action Servlet Mapping -->
          <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>*.do</url-pattern>
          </servlet-mapping>          

          <session-config>
            <session-timeout>300</session-timeout>
          </session-config>

          <!-- The Usual Welcome File List -->
          <welcome-file-list>
            <welcome-file>/index.html</welcome-file>
            <welcome-file>/index.jsp</welcome-file>
          </welcome-file-list>         

      </web-app>
fabiozoroastro

Adicione isso no final do seu struts:

<plug-in className="org.apache.struts.tiles.TilesPlugin">
		<set-property property="definitions-config"
			value="/WEB-INF/tiles-defs.xml" />
		<set-property property="moduleAware" value="true" />
		<set-property property="definitions-parser-validate"
			value="true" />
	</plug-in>

No seu caso: /WEB-INF/tileDefinitions.xml

M

fabiozoroastro:
Adicione isso no final do seu struts:

<plug-in className="org.apache.struts.tiles.TilesPlugin">
		<set-property property="definitions-config"
			value="/WEB-INF/tiles-defs.xml" />
		<set-property property="moduleAware" value="true" />
		<set-property property="definitions-parser-validate"
			value="true" />
	</plug-in>

No seu caso: /WEB-INF/tileDefinitions.xml

Cara era isso mesmo, muito obrigado !!!

Valew.

fabiozoroastro

Disponha.
:slight_smile:

M

fabiozoroastro:
Disponha.
:)

Cara, aproveitando o tópico, já que deu certo minha 1ª aplicação com Tiles seguindo o tutorial, resolvi usar num projeto meu, mas não funcionou, porém não dá erro, apenas mostra uma página em branco. O q pode ser ?

Valew.

fabiozoroastro

Esse erro já ocorreu cmg cara, mas eu não me lembro direito qual era o problema, se não me engano é o caminho do jsp que estava errado, ou então de alguma classe lah no tiles ou mesmo no jsp. Mas eu não me lembro mesmo.
Se você olhar no console da IDE(No eclipse acho que mostra), ele não mostra nenhum Exception não?

*Edit: Se não me engano, o erro está em um dos seus arquivos .jsp. Faz um teste apontando o path tiles pra um jsp:

<html> Deu Certo </html>

Só de teste mesmo.

M

fabiozoroastro:
Esse erro já ocorreu cmg cara, mas eu não me lembro direito qual era o problema, se não me engano é o caminho do jsp que estava errado, ou então de alguma classe lah no tiles ou mesmo no jsp. Mas eu não me lembro mesmo.
Se você olhar no console da IDE(No eclipse acho que mostra), ele não mostra nenhum Exception não?

*Edit: Se não me engano, o erro está em um dos seus arquivos .jsp. Faz um teste apontando o path tiles pra um jsp:

<html> Deu Certo </html>

Só de teste mesmo.

Não está indicando erro algum no Eclipse e nem nos logs !!!

Acho que ele não está reconhecendo o caminho no arquivo de configuração:

<?xml version="1.0" encoding="UTF-8"?>
<component-definitions>   
  
    <definition name="baseDef" path="/templates/layout.jsp">   
        <put name="header" value="/templates/header.jsp"/>   
        <put name="footer" value="/templates/footer.jsp"/>   
        <put name="body"   value=""/>   
    </definition>   
  
    <definition name="index" extends="baseDef">   
        <put name="body" value="/home/index.jsp"/>   
    </definition>   
  
    <definition name="titulos" 	extends="baseDef">   
        <put name="body" value="/home/index.jsp"/>   
    </definition>   
  
    <definition name="metas" 	extends="baseDef">   
        <put name="body" value=""/>   
    </definition> 
    
    <definition name="comissao" extends="baseDef">   
        <put name="body" value=""/>   
    </definition> 
    
    <definition name="pedidos" 	extends="baseDef">   
        <put name="body" value=""/>   
    </definition>   
  
</component-definitions>

Já coloquei até o caminho completo, tipo, “/projeto/templates/header.jsp” e continua mostrando a página em branco !!! sem erros !!!

Veja o que encontrei no console do Eclipse, tem alguma coisa hever ??

org.apache.commons.digester.Digester error
SEVERE: Parse Error at line 2 column 23: Document root element "component-definitions", must match DOCTYPE root "null".
org.xml.sax.SAXParseException: Document root element "component-definitions", must match DOCTYPE root "null".
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:172)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:183)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(XMLNSDocumentScannerImpl.java:779)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1794)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
	at org.apache.commons.digester.Digester.parse(Digester.java:1567)
	at org.apache.struts.tiles.xmlDefinition.XmlParser.parse(XmlParser.java:334)
	at org.apache.struts.tiles.xmlDefinition.I18nFactorySet.parseXmlFile(I18nFactorySet.java:542)
	at org.apache.struts.tiles.xmlDefinition.I18nFactorySet.parseXmlFiles(I18nFactorySet.java:479)
	at org.apache.struts.tiles.xmlDefinition.I18nFactorySet.createDefaultFactory(I18nFactorySet.java:295)
	at org.apache.struts.tiles.xmlDefinition.I18nFactorySet.initFactory(I18nFactorySet.java:269)
	at org.apache.struts.tiles.xmlDefinition.I18nFactorySet.initFactory(I18nFactorySet.java:217)
	at org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper.init(ComponentDefinitionsFactoryWrapper.java:139)
	at org.apache.struts.tiles.TilesUtilImpl.createDefinitionsFactory(TilesUtilImpl.java:168)
	at org.apache.struts.tiles.TilesUtil.createDefinitionsFactory(TilesUtil.java:205)
	at org.apache.struts.tiles.TilesPlugin.init(TilesPlugin.java:230)
	at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:1158)
	at org.apache.struts.action.ActionServlet.init(ActionServlet.java:473)
	at javax.servlet.GenericServlet.init(GenericServlet.java:211)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1105)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:932)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3917)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4201)
	at org.apache.catalina.core.StandardContext.reload(StandardContext.java:2990)
	at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:403)
	at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1277)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1569)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1558)
	at java.lang.Thread.run(Thread.java:595)
04/01/2007 17:41:43 org.apache.struts.tiles.TilesPlugin init
INFO: Tiles definition factory loaded for module ''.
fabiozoroastro

Vc fez o teste como eu falei acima?
Isso tá parecendo erro no seu jsp.

M

fabiozoroastro:
Vc fez o teste como eu falei acima?
Isso tá parecendo erro no seu jsp.

Fiz sim, aliás acabei de fazer e continua a mesma coisa :frowning:

Muito estranho isso!!! :roll:

M

Achei o erro, eu tinha me esquecido de declarar no layout.jsp <%@ taglib uri="/WEB-INF/lib/tiles.tld" prefix="tiles" %> :oops:

Muito Obrigado novamente pela ajuda !!!

fabiozoroastro

Beleza.
Abraço.

matheuscechito

Levantando o tópico…

Marcelo ou Fábio:

Qual .jar vcs utilizaram para esse exemplo?!?!?!?!

vlw
abraços

M

matheuscechito:
Levantando o tópico…

Marcelo ou Fábio:

Qual .jar vcs utilizaram para esse exemplo?!?!?!?!

vlw
abraços

No meu lib está os seguintes arquivos referente a tiles:

struts.jar;

tiles.tld;

tiles-config_1_1.dtd;

espero ter ajudado.

matheuscechito

opa, já deu uma ajuda sim, mas vou explorar um pouco mais de sua bondade…rs

Eu criei um exemplo praticamente igual ao seu e quando tento executar acontece o seguinte erro:

org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: org.apache.struts.tiles.taglib.UseAttributeTei java.lang.ClassNotFoundException: org.apache.struts.tiles.taglib.UseAttributeTei

porém, a classe UseAttributeTei não está no caminho especificado pelo erro e sim em org.apache.struts.taglib.tiles.UseAttributeTei.

Estou achando muito estranho…vc tem alguma idéia do q pode ser???

vlw
abraço

M

Vc configurou todos os arquivos corretamente ??

  • struts-config.xml;
  • tileDefinitions.xml;
  • web.xml;
matheuscechito
marceloplis:
Vc configurou todos os arquivos corretamente ??

- struts-config.xml;
- tileDefinitions.xml;
- web.xml;

Vamos lá...eu acredito q sim, dá uma olhada:

struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC 
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
           "struts-config_1_1.dtd">
<struts-config>
  <action-mappings type="org.apache.struts.action.ActionMapping">
    <action path="/a"  type="testes.DoFirst">  
      <forward name="success" path="aDef"/>  
    </action>  
    <action path="/b" type="testes.DoFirst">  
      <forward name="success" path="bDef"/>  
    </action>  
  </action-mappings>

  <plug-in className="org.apache.struts.tiles.TilesPlugin">
    <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
    <set-property property="moduleAware" value="true" />
    <set-property property="definitions-parser-validate" value="true" />
  </plug-in>
</struts-config>
tiles-defs.xml:
<?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE component-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "tiles-config_1_1.dtd">
  
<component-definitions>  
  
    <definition name="baseDef" path="/WEB-INF/tiles/layout.jsp">  
        <put name="header" value="/WEB-INF/tiles/header.jsp"/>  
        <put name="footer" value="/WEB-INF/tiles/footer.jsp"/>  
        <put name="body" value=""/>  
    </definition>  
  
    <definition name="aDef" extends="baseDef">  
        <put name="body" value="/WEB-INF/tiles/aBody.jsp"/>  
    </definition>  
  
    <definition name="bDef" extends="baseDef">  
        <put name="body" value="/WEB-INF/tiles/bBody.jsp"/>  
    </definition>  
  
</component-definitions>
web.xml:
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>definitions-config</param-name>
      <param-value>/WEB-INF/tiles-defs.xml</param-value>
    </init-param>
  </servlet>
...
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

eu criei uma pasta "tiles" dentro do web-inf para os jsp's.

M

Acho q seu web.xml está faltando alguma coisa !! Compara com o meu:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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>projeto</display-name>
	
    <!-- Standard Action Struts Servlet Maping  -->
    <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>definitions-config</param-name>   
	<param-value>/WEB-INF/tileDefinitions.xml</param-value>   
           </init-param> 
           <load-on-startup>1</load-on-startup>
     </servlet>
  	
  	<!-- Standard Action Servlet Mapping -->
    <servlet-mapping>
    	<servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping> 
	
	<welcome-file-list>
		<welcome-file>ACTLogin.do</welcome-file>		
	</welcome-file-list>
	
	<servlet>
    	<servlet-name>login</servlet-name>
    	<servlet-class>biblioteca.act.ACTLogin</servlet-class>
    </servlet>
    <servlet-mapping>
    	<servlet-name>login</servlet-name>
    	<url-pattern>/ACTLogin.do</url-pattern>
    </servlet-mapping>
    
</web-app>
matheuscechito

marceloplis:

<!-- Standard Action Struts Servlet Maping --> ... <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param>


Você esta utilizando um param-name “config”, mas onde vc utiliza esse “config” depois??? Porque o outro param-name “definitions-config” é utilizado no struts-config.xml

marceloplis:

<!-- Standard Action Servlet Mapping --> <welcome-file-list> <welcome-file>ACTLogin.do</welcome-file> </welcome-file-list> <servlet> <servlet-name>login</servlet-name> <servlet-class>biblioteca.act.ACTLogin</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/ACTLogin.do</url-pattern> </servlet-mapping>


E, que classe é essa “ACTLogin”? É uma classe do seu sistema que faz o login!!!..O que eu deveria declarar no “welcome-file”?? Eu declarei o “a.jsp”, que é a classe que deveria abrir, mas dá o erro que eu citei anteriormente.

matheuscechito

ae marcelo, achei o provável erro…

eu estou utilizando a web-app 2.4, e o exemplo que utilizei com o struts só é aceito ate a versão 2.3

dê uma olhada:
http://www.myeclipseide.com/PNphpBB2+file-printview-t-7401-start-0.html

esse exemplo que eu fiz se encontra em:

fbeli

Estou com problema para implementar o Tiles.
Qual versão do Struts e do Tiles vcs estão usando?

Estou com Struts 1.3 e Tiles eu já tentei os 2 (2 e 1,3)

Tem como enviar o struts-config.xml, web.xml e tiles-defs.xml para comparação?

abraços

Criado 4 de janeiro de 2007
Ultima resposta 31 de out. de 2007
Respostas 21
Participantes 4