如何在Spring MVC中使用Handlebars?

zwi*_*ebl 2 spring spring-mvc handlebars.js handlebars.java

我有包,但我不知道如何使用它.我只是像使用.jsp文件一样使用它们吗?

我尝试过这样的事情:

test.hbs

<p>{{message}}</p>
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

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;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:javax.servlet.ServletException:无法解析名为'dispatcher'的servlet中名为'test.hbs'的视图

我把test.hbs放在/WEB-INF/views/test.hbs中.如果我把任何.jsp文件放在那里,它就可以了.但出于某种原因.hbs无效.有任何想法吗?

man*_*ish 10

Spring MVC没有对Handlebars的开箱即用支持(请参阅支持的视图技术列表的官方文档).

话虽如此,可以直接向Spring MVC添加对任何基于JVM的视图技术的支持.在较高的层面上,这需要实现一个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>
Run Code Online (Sandbox Code Playgroud)

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

<bean class="com.github.jknack.handlebars.springmvc.HandlebarsViewResolver">
  <property name="prefix" value="/WEB-INF/views/"/>
  <property name="suffix" value=".hbs"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

第3步:向应用程序添加Handlebars视图

鉴于上述配置,应在/WEB-INF/views/文件夹下添加Handlebars视图.

第4步:加载Handlebars视图

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

  mav.addObject("m", m);

  return mav;
}
Run Code Online (Sandbox Code Playgroud)

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