在工作中,我的任务是将一堆 HTML
文件转换成一个简单的 JSP
项目 . 它是's really all static, no serverside logic to program. I should mention I'对Java来说是全新的 . JSP文件似乎可以很容易地使用常见的包含和变量,就像 PHP
,但我想知道一种简单的方法来获得类似模板继承( Django
样式)或者至少能够拥有base.jsp包含页眉和页脚的文件,所以我可以稍后插入内容 .
Ben Lings似乎在这里给出了一些希望:JSP template inheritance有人可以解释如何实现这个目标吗?
鉴于我很高兴只是让URL直接映射到 .jsp
文件,但我愿意接受建议 .
谢谢 .
edit: 我不想使用任何外部库,因为它会增加我自己和其他从事该项目工作的人的学习曲线,而我所工作的公司也签约了这样做 .
Another edit: 我不确定 JSP tags
是否有用,因为我的内容实际上没有任何模板变量 . 我需要的是一种能够做到这一点的方法:
base.html:
<html><body>
{ content.body }
</body></html>
somepage.html
<wrapper:base.html>
<h1>Welcome</h1>
</wrapper>
输出为:
<html><body>
<h1>Welcome</h1>
</body></html>
我认为这会给我足够的多功能性来做我需要的一切 . 它可以通过 includes
来实现,但是我需要为每个包装器提供顶部和底部包含,这有点混乱 .
5 回答
由于skaffman suggested, JSP 2.0 Tag Files 是蜜蜂的膝盖 .
让我们举一个简单的例子 .
将以下内容放入
WEB-INF/tags/wrapper.tag
现在在
example.jsp
页面中:这完全符合你的想法 .
所以,让我们把它扩展到更一般的东西 .
WEB-INF/tags/genericpage.tag
要使用它:
这会给你带来什么?很多,但它变得更好......
WEB-INF/tags/userpage.tag
要使用它:(假设我们在请求中有一个用户变量)
但它让你想在其他地方使用那个用户细节块 . 所以,我们将重构它 .
WEB-INF/tags/userdetail.tag
现在前一个例子变为:
JSP标记文件的优点在于它允许您基本标记通用标记,然后将其重构为您的内容 .
JSP Tag Files
几乎篡夺了像_686445等等的东西,至少对我而言 . 我发现它们更容易使用,因为唯一的结构是你给它的,没有任何先入为主 . 另外,您可以将JSP标记文件用于其他内容(例如上面的用户详细信息片段) .这里完成了's an example that is similar to DisplayTag that I',但这都是使用标记文件(和
Stripes
框架,即s:标签......)完成的 . 这会产生一个行表,交替颜色,页面导航等:当然,这些标签适用于
JSTL tags
(如c:if
等) . 你唯一能做到的就像你想象的那么多 . 如果我需要scriptlet的东西,我只需将逻辑放入标签并将标签放入 . 容易 .因此,标记文件可以是您想要的任何内容 . 在最基本的层面上,它是简单的剪切和粘贴重构 . 抓取一大块布局,将其剪切掉,进行一些简单的参数化,然后用标签调用替换它 .
在更高的层次上,你可以做一些复杂的事情,比如我在这里的这个表格标签 .
我做了相当简单的Django样式JSP模板继承标记库 . https://github.com/kwon37xi/jsp-template-inheritance
我认为无需学习曲线就可以轻松管理布局 .
示例代码:
base.jsp:布局
view.jsp:内容
基于与@Will Hartung的答案相同的基本思想,这是我的魔术单标签可扩展模板引擎 . 它甚至包括文档和示例:-)
WEB-INF /标签/ block.tag:
使用tiles . 它救了我的命 .
但是,如果你能't, there'的include tag,使它类似于PHP .
除非你有超级简单的内容,否则body标签可能实际上并不能满足你的需要 . body标签用于定义指定元素的主体 . 看看this example:
您可以指定元素名称,元素可能具有的任何属性(在本例中为“lang”),然后指定其中的文本 - 正文 . 因此,如果
content.headerName = h1
,content.lang = fr
,和content.body = Heading in French
那么输出就是
我知道这个答案是在事实发生后的几年,并且Will Hartung已经有了很好的JSP答案,但是有Facelets,它们甚至在原始问题中的链接问题的答案中被提及 .
Facelets SO标签描述
可悲的是,我发现最好的简单教程描述是在Wikipedia而不是教程网站 . 事实上,描述templates的部分确实如此与原始问题所要求的一致 .
由于Java-EE 6已经弃用了JSP,我建议使用Facelets,尽管事实上看起来可能需要更多,而不是通过JSP获得 .