Problema com arquivos statics usando spring e tiles

Oi !

Estou com um problema usando o tiles 2.2.2 e spring 3.
Minhas jsp´s ficam apartir do diretorio jsp.

JSP > home.jsp
JSP > cliente > list.jsp

No header do meu layout eu coloquei:

Dessa forma o layout só é aplicado para o home.jsp, e pro cliente.jsp não pega.
Como posso fazer pra que o css pegue pra qqr jsp independente de diretorio ?

Tiles:

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
		<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/> 
	</bean> 

	<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
		<property name="definitions"> 
			<list> 
				<value>/WEB-INF/layouts/layouts.xml</value> 
			</list> 
		</property> 
	</bean>

Layout.xml

<definition name="login" extends="baseLayout">
        <put-attribute name="body" value="/WEB-INF/jsp/login.jsp" />
    </definition>
    
    <definition name="cliente/show" extends="baseLayout">
        <put-attribute name="body" value="/WEB-INF/jsp/cliente/list.jsp" />
    </definition>

Ninguem sabe me ajudar nessa ?
:cry:

Se está com pressa, pague pela consultoria. Lembre-se o GUJ é gratuito e ninguém tem qualquer obrigação com a tua urgência.
Sempre trabalhei com tiles usando Struts e, sempre defini o estilo no layout que o tiles pré define e nunca tive problemas.
Será que você não está fazendo algo errado aí não?

fdiaz,

Bom, posso te ajudar dizendo como está no meu projeto. No spring-servlet.xml (/src/main/webapp/WEB-INF):

<!--Tiles 2 --> <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> <property name="definitions"> <!-- Qualquer tiles.xml (multiple) --> <list> <value>/WEB-INF/**/tiles.xml</value> </list> </property> </bean>
O meu tiles.xml (o principal, tenho um principal e vários outros por assunto) - /src/main/webapp/WEB-INF/views :

[code]<?xml version="1.0" encoding="UTF-8" ?>

<definition name="base.definition" template="/WEB-INF/views/template/layout.jsp">
	<put-attribute name="title" value="" />
	<put-attribute name="header" value="/WEB-INF/views/template/header.jsp" />
	<put-attribute name="body" value="" />
	<put-attribute name="topBar" value="" />
	<put-attribute name="footer" value="/WEB-INF/views/template/footer.jsp" />
</definition>

[/code]
O meu layout.jsp (/src/main/webapp/WEB-INF/views/template)

[code]<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>

<%@ taglib uri=“http://tiles.apache.org/tags-tiles” prefix=“tiles”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@ taglib uri=“http://www.springframework.org/tags/form” prefix=“form”%>
<%@ taglib uri=“http://www.springframework.org/tags” prefix=“spring”%>

<spring:url var=“urlImagens” value="/resources/images" />
<spring:url var=“urlJavascript” value="/resources/javascript" />
<spring:url var=“urlCss” value="/resources/css" />

// (...)

// (…)

[/code] E finalmente, eu deixo um tiles.xml por assunto, por exemplo, usuários (/src/main/webapp/WEB-INF/views/user/tiles.xml): [code]<?xml version="1.0" encoding="UTF-8" ?>
<definition name="user/list" extends="base.definition">
	<put-attribute name="title" value="Title User List" />
	<put-attribute name="body" value="/WEB-INF/views/user/list.jsp" />
</definition>
	
<definition name="user/form" extends="base.definition">
	<put-attribute name="title" value="Title User Form" />
	<put-attribute name="body" value="/WEB-INF/views/user/form.jsp" />
</definition>

<definition name="user/details" extends="base.definition">
	<put-attribute name="title" value="Title User Form" />
	<put-attribute name="body" value="/WEB-INF/views/user/details.jsp" />
</definition>

[/code]
Entendeu? Se me lembro bem, peguei da página do krams, qualquer coisa dá uma olhada lá que tem exemplos.

Ah, outra coisa que só lembrei agora… tem essa tag no meu applicationContext.xml:

<!-- Handles GET requests for /resources/** by efficiently serving static content in the ${webappRoot}/resources dir --> <mvc:resources mapping="/resources/**" location="/resources/" cache-period="31556926" />
Ou seja, tudo o que estiver dentro do meu resources* ele entende como conteúdo estático (css, javascript e afins)

  • /src/main/webapp/resources

@jaboot

Muito obrigado pela resposta.
O meu está da forma que vc disse.
Ainda não consegui achar o erro.

Eu tenho:

static
     - css
     - images
     - js

WEB-INF
     - views
          - layouts
               [b]- layouts.xml[/b]
               - default
                    - default.jsp (é o que agrega os outros jsp pra formar o layout. dentro dele tem as definições do css: [b]static/css/style.css[/b])
                    - header.jsp
                    - footer.jsp
          - cliente
               - list.jsp [b](NÃO pega o css)[/b]
               - show.jsp [b](NÃO pega o css)[/b]
          - home.jsp [b](pega o css)[/b]
          - login.jsp [b](pega o css)[/b]

layouts.xml

<tiles-definitions> 

	<definition name="baseLayout" template="/WEB-INF/views/layouts/default/default.jsp"> 
		<put-attribute name="header" value="/WEB-INF/views/layouts/default/header.jsp" /> 
		<put-attribute name="footer" value="/WEB-INF/views/layouts/default/footer.jsp" /> 
	</definition>
	
    <definition name="home" extends="baseLayout">
        <put-attribute name="body" value="/WEB-INF/views/home.jsp" />
    </definition>
    
    <definition name="login" extends="baseLayout">
        <put-attribute name="body" value="/WEB-INF/views/login.jsp" />
    </definition>
    
    <definition name="cliente/show" extends="baseLayout">
        <put-attribute name="body" value="/WEB-INF/views/cliente/show.jsp" />
    </definition>
    
</tiles-definitions>

application-context.xml

<mvc:resources mapping="/static/**" location="/static/" />

application-servlet.xml

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
		<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/> 
	</bean> 

	<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
		<property name="definitions"> 
			<list> 
				<value>/WEB-INF/views/layouts/layouts.xml</value> 
			</list> 
		</property> 
	</bean>

Será q alguem consegue ver o erro ?
Normalmente qm está de fora ve melhor.

Obrigado !

Olá, estou com mesmo problema que nosso companheiro do tópico, porém o problema só surge quando entro em uma url dinâmica @RequestMapping("/respawn/{path}")

O problema é que meus arquivos estáticos não reconhecem o caminho quando faço dessa forma.

Estou usando a pasta resources para armazenar esse tipo de arquivo. Se alguém puder ajudar com os problemas contidos nesse tópico provavelmente estarão me ajudando também,

abraços.

edit: um detalhe importante.
para solucionar o problema, estou tentando colocar jstl com a url na frente dos meus links

porém sempre que eu acesso a página pela primeira vez, ela não consegue interpretar o caminho e fica dessa forma

&lt;link rel="stylesheet" type="text/css" href="/RespawnTimer/;jsessionid=03F562A8924C61527C0F46E6324A0056resources/css/style.css" /&gt;

quando dou um reflesh o link volta ao normal

&lt;link rel="stylesheet" type="text/css" href="&lt;c:url value="/resources/"/&gt;css/style.css&quot; /&gt;

alguém saberia como resolver isso?
pode ser uma alternativa.

Isso é coisa do Spring… principalmente quando você acessa a aplicação pela primeira vez.

Depois que você dá um refresh na página, tudo volta ao normal, não?

Sim, pelo que parece esse é um problema de filtro.

Resolvi o problema usando puro jstl na url, ficou assim:

&lt;link rel="stylesheet" type="text/css" href="&lt;c:url value="/resources/css/style.css"/&gt;&quot; /&gt;

Agora eu posso limpar o cache do meu navegador e acessar a pagina pela primeira vez que ele não falha na leitura do link.

Essa foi uma alternativa não muito elegante, já que esta configurado a pasta de arquivos estativos no spring-context.xml

&lt;mvc:resources mapping="/resources/**" location="/resources/" /&gt; 

Sou novo como javeiro, então essa é mais uma das coisas que eu gostaria de entender, pq mesmo configurado no spring-context.xml ele insiste em quebrar os links no jsp.