如何在Spring MVC中使用Handlebars?

3

我有这些软件包,但是不确定如何使用它们。我是否只需像使用 .jsp 文件一样使用它们?

我尝试过类似这样的方式:

test.hbs

<p>{{message}}</p>

在我的控制器中:
private static class M {
    private final String message;

    public M(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

@RequestMapping("/test")
public ModelAndView testView() {
    ModelAndView mav = new ModelAndView("test.hbs");
    M m = new M("Hello, world!");

    mav.addObject("m", m);

    return mav;
}

我遇到了错误:javax.servlet.ServletException: 在名称为“dispatcher”的servlet中找不到名称为'test.hbs'的视图

我通常将test.hbs放在/WEB-INF/views/test.hbs中。如果我在那里放置任何.jsp文件,它都可以工作。但出于某种原因,.hbs无法正常工作。有什么想法吗?

1个回答

12

Spring MVC没有针对Handlebars的开箱即用支持(请参见官方文档以获取支持的视图技术列表)。

话虽如此,将任何基于JVM的视图技术添加到Spring MVC中是很简单的。从高层次来看,这需要实现org.springframework.web.servlet.View及其相应的org.springframework.web.servlet.ViewResolver

幸运的是,已经存在一个开源项目提供了这种集成。可以按照以下步骤将该项目集成到现有的Spring MVC应用程序中。

步骤1:将库添加到构建系统中(假设使用Maven)

<dependency>
  <groupId>com.github.jknack</groupId>
  <artifactId>handlebars-springmvc</artifactId>
  <version>4.0.6</version>
</dependency>

步骤2: 在 dispatcher-servlet.xml(或等效的Java配置)中为Spring MVC应用程序配置Handlebars ViewResolver

<bean class="com.github.jknack.handlebars.springmvc.HandlebarsViewResolver">
  <property name="prefix" value="/WEB-INF/views/"/>
  <property name="suffix" value=".hbs"/>
</bean>

第三步:将Handlebars视图添加到应用程序中

给定上述配置,Handlebars视图应该添加在/WEB-INF/views/文件夹下。

第四步:加载Handlebars视图

@RequestMapping("/test")
public ModelAndView testView() {
  ModelAndView mav = new ModelAndView("test");
  M m = new M("Hello, world!");

  mav.addObject("m", m);

  return mav;
}

注意,视图名称不应包含.hbs作为后缀已经添加到配置中。


嘿,谢谢你的解释 - 但是我需要在Spring MVC 4中使用注解而不是XML。我知道如何创建这样的bean,但是如何添加依赖呢? - zwiebl
1
需要将依赖项添加到您的构建文件(Maven或Gradle)中。该代码将与Spring 3/4一样工作。基于XML和注释的配置是等效的,因此只需将XML片段转换为Java即可。如果您不知道如何操作,请参考官方的Spring文档,其中提供了并排显示的两种示例,并从中学习。 - manish
对于 Spring 5,支持的视图技术列表在此处:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-view - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接