Spring MVC 和 Facelets 等模板引擎

Posted

技术标签:

【中文标题】Spring MVC 和 Facelets 等模板引擎【英文标题】:Spring MVC and templating engine like Facelets 【发布时间】:2013-01-30 03:26:06 【问题描述】:

在使用 Spring MVC 时是否有真正的 JSP 标签替代方案?

我正在使用 Spring MVC 将其集成到 JS 框架中。 我在 Spring MVC 中缺少的是一种 模板框架

我以前使用过带有 JSF2 的 Facelets 模板,我喜欢它。

是否有与 Spring MVC 很好地集成并提供与 Facelets 类似的功能的框架/技术?

没有(或很少)xml 配置 可以在一个模板文件中定义部分,并从一个文件中填充所有部分的所有供应内容

我正在查看 Apache Tiles 文档,看来您需要为模板中的每个部分设置单独的文件。

示例(伪代码):

template.html

<insert:headerSection>
<insert:bodySection>

using-template.html

<use-template: template.html>

<define:headerSection>this is a header</define:headerSection>
<define:bodySection>this is a body</define:bodySection>

我知道我可以使用 JSP 实现这一点,但使用 Facelets 编写代码看起来更简洁、更快捷。

如果 JSP 是我的最佳选择,我在 this thread 中找到了一些建议

【问题讨论】:

【参考方案1】:

我认为 Spring Webflow 支持 JSF 2。如果你想坚持使用纯 Spring MVC,它还提供了 Tiles 和 Velocity 模板,或者你甚至可以编写自己的自定义 ViewResolver。

【讨论】:

感谢您的回答,但除了 Facelets 模板之外,我不需要任何 JSF2 功能,而且我没有任何复杂的视图流,因此我不需要 WebFlow。至于 Tiles 和 Velocity,我发现它不像 facelets 那样容易使用(xml 配置,模板的每段代码都必须放在单独的文件中) 如果 Spring 没有 Facelets ViewResolver,你可以自己编写。【参考方案2】:

在使用 Tiles 进行一些测试后,我决定使用 JSP。 我不需要配置,我通过编写一个简单的 tag 文件并使用&lt;jsp:attribute/&gt;&lt;jsp:invoke/&gt; 标签实现了上述功能。

【讨论】:

【参考方案3】:

可以使用 Spring MVC 配置 Facelets。在这里查看:https://github.com/acichon89/springmvcfacelets

【讨论】:

【参考方案4】:

freemarker 或 velocity 怎么样,有一个关于如何将这些技术与 Spring MVC 集成的清晰解释。请看以下内容:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/view.html

【讨论】:

【参考方案5】:

我认为制作模板的框架正在被弃用。在这方面,您可以考虑公开一个 Restful API,以便您可以将后端与前端技术分开。通过这种方式,您可以在后端使用 Spring-MVC 的优势,并让前端来决定构建用户界面 (AngularJS) 的技术。

Spring-MVC 支持构建 Restful 控制器,你只需要将你的类标记为@RestController。

【讨论】:

以上是关于Spring MVC 和 Facelets 等模板引擎的主要内容,如果未能解决你的问题,请参考以下文章

JSP for Spring MVC视图层的替代方案

Facelets

在 JAR 中打包 Facelets 文件(模板、包含、组合)

如何将 Facelets 支持添加到 Spring Tool Suite?

如何在Facelets模板中引用CSS / JS /图像资源?

Spring MVC 和模板变量