Recently I had bitter experience setting up different layout in sitemesh for different controller of Spring. In general as a developer my expectation is for different controller I setup different url and for each url I add a decorator with unique name and different layout page.
For instance, I have two controllers –
AdminController
and UserController
as follows.
1
2
3
4
5
6
7
8
9
| @Controller @RequestMapping ( "/admin" ) public class AdminController { @RequestMapping (value = "/index" , method = RequestMethod.GET) public String index() { return "admin/index" ; } } |
1
2
3
4
5
6
7
8
9
| @Controller @RequestMapping ( "/user" ) public class UserController { @RequestMapping (value = "/index" , method = RequestMethod.GET) public String index() { return "user/index" ; } } |
So, url
and url
project/admin/index
– points to admin controller’s index pageand url
project/user/index
points to user controller’s index page.
Now I want to decorate two urls with two different sitemesh layout.
decorator.xml
looks like –
1
2
3
4
5
6
7
8
9
10
|
< decorators defaultdir = "/WEB-INF/layouts" > < decorator name = "admin" page = "admin.jsp" > < pattern >*admin*</ pattern > </ decorator > < decorator name = "user" page = "user.jsp" > < pattern >*user*</ pattern > </ decorator > </ decorators > |
Take a look into
public Decorator getDecorator(HttpServletRequest request, Page page)
method in ConfigDecoratorMapper.java
1
2
3
4
5
6
7
8
9
| < servlet > < servlet-name >project</ servlet-name > < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class > </ servlet > < servlet-mapping > < servlet-name >project</ servlet-name > < url-pattern >*.html</ url-pattern > </ servlet-mapping > |
Now
request.getServletPath()
will return the whole url with controller/method specific part for example /admin/index.html
. So the pattern in decorator will work as expected. However it might not be feasiable for you to setup dispatcher servlet mapping like this and you still want different layout for different controller. In that case you might want to consider setting sitemesh layout via meta tag in view jsp.
1 comment:
C'est là que le designer nike air jordan 4 iv retro nuptiale Minal Shah peut vous aider, avec ses conseils d'experts sur ce qu'il faut considérer lors du choix de cette fabuleuse robe. La bioélectronique pourrait être l'application des principes de l'électronique à la biologie et à la médecine. Rajon Rondo et Russell Westbrook sont quelques-uns des joueurs avec PE de Hyperenforcer. Il existe de nombreux magasins, ne pas oublier nike air jordan basketzone les magasins en ligne aussi efficacement à partir d'où vous pouvez commander des vêtements de style urbain de votre choix qui s'intègre bien dans votre budget de dépenses. Eh bien, l'individu a raison. Le but clair de Loctite GO2 Glue aidera les gens chaussure nike sb rouge à faire des réparations invisibles avec moins de problèmes.
Post a Comment