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 , 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<h2>${TEXT_TITLE_PAGE}</h2>
<hr/>
Ma page menu.jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>