Apache Tiles/spring: CSS non appliquée sur certaines pages
Bonjour,
Je suis débutant JEE et je rencontre un problème avec Spring MVC et Apache Tiles 3 que je n'arrive pas à résoudre malgré mes nombreuses heures de recherches sur les différents tutoriels et forums. Je vous prie de m'excuser si je n'emploie pas forcément les bons termes dans mes explications :oops:, mais je vais essayer d'être le plus clair possible.
Lorsque j'accède à une page via un controller dédié à cette page(URL http://localhost:8080/MyApp/test) :
Code:
1 2 3 4 5 6 7 8 9 10
| @Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping(value = "", method = RequestMethod.GET)
public String levierPage(ModelMap model) {
return "test";
}
} |
ma page, basée sur un template, s'affiche correctement c'est à dire avec le menu, le header, le corps et la mise en forme tels que définis dans la configuration de Tiles.
En revanche, si j'accède à cette même page depuis un controller dédié à une autre page vie l'URL http://localhost:8080/MyApp/levier/test:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Controller
@RequestMapping("/levier")
public class LevierController {
@RequestMapping(value = "", method = RequestMethod.GET)
public String levierPage(ModelMap model) {
return "levier";
}
@RequestMapping(value="/test", method = RequestMethod.GET )
public String levierTest1() {
return ("test");
}
} |
celle-ci s'affiche avec le menu, le header et le corps, mais aucun style CSS n'est appliqué.
Une âme charitable saurait-elle me dire qu'est-ce qui ne ne va pas dans mon code ?
Merci d'avance pour votre aide.
Configuration tiles.xml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="base.definition" template="/WEB-INF/views/templates/layout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/WEB-INF/views/templates/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/views/templates/menu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="" />
</definition>
<definition name="levier" extends="base.definition">
<put-attribute name="title" value="Levier Manager" />
<put-attribute name="body" value="/WEB-INF/views/levier.jsp" />
</definition>
<definition name="test" extends="base.definition">
<put-attribute name="title" value="Test Page" />
<put-attribute name="body" value="/WEB-INF/views/test.jsp" />
</definition>
</tiles-definitions> |
View resolver :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| @Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.app.spring")
public class ApplicationConfiguration extends WebMvcConfigurerAdapter {
@Bean
public UrlBasedViewResolver urlBasedViewResolver() {
UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver();
urlBasedViewResolver.setViewClass(TilesView.class);
urlBasedViewResolver.setOrder(0);
return urlBasedViewResolver;
}
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver();
urlBasedViewResolver.setPrefix("/WEB-INF/views/");
urlBasedViewResolver.setSuffix(".jsp");
urlBasedViewResolver.setViewClass(JstlView.class);
urlBasedViewResolver.setOrder(1);
return urlBasedViewResolver;
}
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer tilesConfigurer = new TilesConfigurer();
tilesConfigurer.setDefinitions(new String[] { "WEB-INF/views/tiles/tiles.xml"});
tilesConfigurer.setCheckRefresh(true);
tilesConfigurer.setPreparerFactoryClass(org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory.class);
return tilesConfigurer;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
registry.addResourceHandler("/css/**").addResourceLocations("/static/css/");
registry.addResourceHandler("/images_cds/**").addResourceLocations("/static/images_cds");
registry.addResourceHandler("/test/**").addResourceLocations("/static/test/");
registry.addResourceHandler("/images/**").addResourceLocations("/static/test/images");
registry.addResourceHandler("/js/**").addResourceLocations("/static/js");
}
} |
Dispatcher Servlet Initializer :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { ApplicationConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
//For the session timeout management :
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
servletContext.addListener(new SessionListener());
}
@Override
protected Filter[] getServletFilters() {
return new Filter[] { new HiddenHttpMethodFilter() };
}
} |
Ma page template layout.jsp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link type="text/css" href="static/css/menu.css" rel="stylesheet" />
<script type="text/javascript" src="static/css/menu.js"></script>
<script type="text/javascript" src="static/css/jquery.js"></script>
<link type="text/css" href="static/css/styles.css" rel="stylesheet" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><tiles:insertAttribute name="title" ignore="true" /></title>
</head>
<style type="text/css">
div#menu {
margin:0px auto;
position: fixed;
top: 0;
left: 0;
width: 100%;
}
div#header {
background-color: #ffffff;
margin: 30px auto;
position: fixed;
top: 0;
left: 0;
width: 100%;
}
div#body {
position: absolute;
margin:110px auto;
left: 0;
width: 100%;
}
</style>
<body onload="set_float_menu();">
<div style="z-index: 3" id= "menu" ><tiles:insertAttribute name="menu" /></div>
<div style="z-index: 2" id= "header"><tiles:insertAttribute name="header" /></div>
<div style="z-index: 1" id= "body"><tiles:insertAttribute name="body" /></div>
</body>
</html> |
Ma page header.jsp :
Code:
1 2
| <h2>${TEXT_TITLE_PAGE}</h2>
<hr/> |
Ma page menu.jsp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<link type="text/css" href="static/css/menu.css" rel="stylesheet" />
<script type="text/javascript" src="static/css/jquery.js"></script>
<script type="text/javascript" src="static/css/menu.js"></script>
<style type="text/css">
{ margin:0;
padding:0;
}
body { background:rgb(227,219,210); }
div#menu {
margin:0px auto;
}
</style>
</head>
<body>
<div id="menu">
<ul class="menu">
<li><a href="#" class="parent"><span>Admin</span></a>
<ul>
<li><a href="#" class="parent"><span>Tables</span></a>
<ul>
<li><a href="#" class="parent"><span>Leviers</span></a>
<ul>
<li><a href="#"><span>Sub Item 1.1.1</span></a></li>
<li><a href="#"><span>Sub Item 1.1.2</span></a></li>
</ul>
</li>
<li><a href="#"><span>Sub Item 1.2</span></a></li>
<li><a href="#"><span>Sub Item 1.3</span></a></li>
<li><a href="#" class="parent"><span>Sub Item 1.7</span></a>
<ul>
<li><a href="#"><span>Sub Item 1.7.1</span></a></li>
<li><a href="#"><span>Sub Item 1.7.2</span></a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#"><span>Sub Item 2</span></a></li>
<li><a href="#"><span>Sub Item 3</span></a></li>
</ul>
</li>
</ul>
</div>
</body> |
Résolu : Apache Tiles/spring: CSS non appliquée sur certaines pages
J'ai enfin fini par trouver le problème après quelques heures de recherches supplémentaires...
En fait, dans la page menu.jsp (par exemple), pour la lier au CSS correspondant, il faut remplacer :
Code:
<link type="text/css" href="static/css/menu.css" rel="stylesheet" />
par :
Code:
<link type="text/css" href="<c:url value="/static/css/menu.css"/>" rel="stylesheet" />
Oui c'était juste ça le problème :aie:.