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) :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.
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"; } }
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:celle-ci s'affiche avec le menu, le header et le corps, mais aucun style CSS n'est appliqué.
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"); } }
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 :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 <?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>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
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"); } }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 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 header.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 menu.jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <h2>${TEXT_TITLE_PAGE}</h2> <hr/>
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>
Partager