Hasor Freemarker

2018-10-09 11:02 更新

使用 Freemarker 作为模板引擎。

Hasor 框架内置了 Freemarker 渲染引擎插件,您只需要引用 freemarker 的 jar 包,然后配置一下渲染引擎即可。

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.23</version>
</dependency>
public class StartModule extends WebModule {
    @Override
    public void loadModule(WebApiBinder apiBinder) throws Throwable {
        apiBinder.suffix("htm").bind(FreemarkerRender.class);//设置 Freemarker 渲染器
    }
}

您可以通过 *.htm 的形式访问您的请求处理器。然后使用 freemarker 进行渲染。

@MappingTo("/index.htm")
public class Index {
    public void execute(RenderInvoker invoker) {
        ...
    }
}

如果您是 restful 方式,您还可以通过 @Produces 注解指定渲染器

@MappingTo("/index.htm")
public class Index {
    @Produces("htm")
    public void execute(RenderInvoker invoker) {
        ...
    }
}


你也可以在处理表单设置渲染的页面时,指定渲染引擎。如下:

@MappingTo("/login.do")
public class Login {
    public void execute(RenderInvoker invoker) {
        if (test){
            invoker.renderTo("htm","/welcome.htm");
        } else {
            invoker.renderTo("jsp","/error.jsp");
        }
    }
}



Hasor 的内置 Freemarker 还允许使用您自定义的 Freemarker 引擎作为渲染器引擎,而不是内置创建的。(使用用户自己创建的 Freemarker 引擎会让开发者更加灵活的掌控整个程序)


我们有两种方式进行扩展,第一种方式继承已有的 Freemarker 渲染器进行扩展。

public class MyFreemarkerRender extends FreemarkerRender {
    @Override
    protected Configuration newConfiguration(AppContext appContext,
                    ServletContext servletContext) throws IOException {
        // 创建 Freemarker 引擎
        return ...
    }
    @Override
    protected void configSharedVariable(AppContext appContext,
                    ServletContext servletContext, Configuration freemarker) throws TemplateModelException {
        ...
        super.configSharedVariable(appContext, servletContext, freemarker);
        freemarker.setSharedVariable("varKey", ...); // 自定义变量
    }
}
public class StartModule extends WebModule {
    @Override
    public void loadModule(WebApiBinder apiBinder) throws Throwable {
        apiBinder.suffix("htm").bind(MyFreemarkerRender.class);//设置 Freemarker 渲染器
    }
}


第二种方式,比较简单,您只需要将 Freemarker 的 Configuration 对象提供出来即可。

public class StartModule extends WebModule {
    @Override
    public void loadModule(WebApiBinder apiBinder) throws Throwable {
        apiBinder.suffix("htm").bind(FreemarkerRender.class);   //设置 Freemarker 渲染器
        apiBinder.bind(Configuration.class).to( ... );          //配置渲染引擎
    }
}


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号