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