JSP-based Templating with Spring

2019-01-23 09:46发布

问题:

I'm using Spring's MVC with JSP views. Every JSP page has similar structure - headers, content, footers, perhaps a sidebar, etc. Looking around for "best practices" people seem to "include" footers and headers, but that means that every JSP page includes these "include" statements, giving a fixed format. To my eye a better solution would involve nested views, where a base template is extended with information appropriate to the page in question. One advantage of this approach is that you can have default values assumed in the base template without repeating them elsewhere. Another advantage is that you can further separate structure and content ("header" and "footer" being structural, and so belonging in the base template) in pages which contain a lot of text (think of help pages - you could put all that in the database, but why bother, especially since with Spring you can resolve to different views via the locale?).

There doesn't seem to be any support for this at the MVC level in Spring, but it could be implemented in JSP using custom tags and, indeed, there's a rather clunky attempt here (that might explain what I want better than this question, although I think you could make it less intrusive).

Anyway, my question is - does this already exist as a (popular/standard) tag library? I'm happy writing custom tags, but my impression of this stuff (generating web sites) is that there's a huge range of solutions already out there, with most work going into choosing the correct tools (eg Spring). Thanks.

回答1:

I'd recommend SiteMesh. It works well with Spring.



回答2:

I might not be getting the full picture here but you may also want to take a look at apache tiles

Personally I prefer to avoid the complexity of adding new frameworks, so I just stick with using tag files



回答3:

If you're not tied to Spring MVC, I would suggest Apache Wicket as it allows for exactly the type of behavior you're describing. It also integrates well with Spring for IoC.

Wicket's markup inheritance



回答4:

I'd recommend Apache Tiles

I have done this with SiteMesh and Tiles. But I belive Tiles is better for this job then SiteMesh. -- In MHO the aim SiteMesh is more in manipulating existing web pages.