打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于springboot的enjoy的模板渲染封装

引言

enjoy是基于java封装的一套指令模板库,它同freemarker一样,是模板引擎,但相对来说,上手却比freemarker简单,同时它也是jfinal框架的核心组成部分。本次我们主要以springboot框架来进行探讨,如何更好的使用enjoy模板。

引入配置

      代码坐标              <dependency>            <groupId>com.jfinal</groupId>            <artifactId>enjoy</artifactId>            <version>5.0.3</version>            <scope>provided</scope>        </dependency>

说明:scope标签指打包时,enjoy相关的jar包是否需要被打入jar包中,这里我配置的是provided,代表该jar包在打包时,将不会被打入,它将作为lib包提供支持。

初始化

    @Bean    public ViewResolver viewEqAdminResolver() {        JFinalViewResolver resolver = new JFinalViewResolver();        resolver.setSourceFactory(new ClassPathSourceFactory());        resolver.setDevMode(true);        resolver.setSuffix(".html");        resolver.setContentType("text/html;charset=UTF-8");        resolver.setToClassPathSourceFactory();        resolver.setBaseTemplatePath("/enjoy/");        resolver.setSessionInView(true);        return resolver;    }

@Bean注解,代表在springboot启动时,会注入bean对象;并返回一个JFinalViewResolver视图解析器。

以上代码配置仅作为基础配置,分别设置了访问后缀,访问基础路径,以及响应格式。

封装指令

enjoy比较强大的功能就是指令的封装,目前网上扔无相关资料进行对指令封装,接下来请看下述代码。

  • 自定义注解

package cn.net.rjnetwork.directive.ano;

import java.lang.annotation.*;

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface RjnetworkDircetive {
String value();

boolean override() default false;
}
  • 基础指令封装

package cn.net.rjnetwork.directive;
import com.jfinal.template.Directive;
import com.jfinal.template.Env;
import com.jfinal.template.io.Writer;
import com.jfinal.template.stat.Scope;
import lombok.extern.slf4j.Slf4j;


/**
* @auther huzhenjie
* @email huzhenjie@rjnetwork.net.cn
* @date 2022/11/20 08:01
* @desc
*/

@Slf4j
public class RjnetworkDirectiveBase extends Directive {

public void exec(Env env, Scope scope, Writer writer) {
log.info("进入执行器{},{},{}",env,scope,writer);
scope = new Scope(scope);
scope.getCtrl().setLocalAssignment();
this.exprList.eval(scope);
this.stat.exec(env, scope, writer);
}



}
  • 设置指令

/**
* @desc enjoy 添加自定义指令 基于springboot项目,如果需要引用,则需要项目为springboot项目
* @param jfr enjoy 模版对象
*/
public void addDircetives( JFinalViewResolver jfr ) throws Exception{
Engine engine = jfr.getEngine();
Map<String, Object> directives = applicationContext.getBeansWithAnnotation(RjnetworkDircetive.class);
log.info("获取的指令列表为{}",directives);
for (Map.Entry<String, Object> entry : directives.entrySet()) {
Object value = entry.getValue();
Class aClass = AopUtils.getTargetClass(value);
engine.addDirective(entry.getKey(),aClass);
}
}
  • 将指令添加至解析器中

  • try {
    directiveConstFunc.addDircetives(JFinalViewResolver);
    } catch (Exception e) {
    log.error("添加jfinal指令异常,{}",e.getLocalizedMessage(),e);
    }

使用

package cn.net.rjnetwork.qixiaozhu.directive;

import cn.net.rjnetwork.directive.RjnetworkDirectiveBase;
import cn.net.rjnetwork.directive.ano.RjnetworkDircetive;
import cn.net.rjnetwork.qixiaozhu.entity.QixiaozhuDict;
import cn.net.rjnetwork.qixiaozhu.service.IQixiaozhuDictService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jfinal.template.Env;
import com.jfinal.template.io.Writer;
import com.jfinal.template.stat.Scope;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
* @auther huzhenjie
* @email huzhenjie@rjnetwork.net.cn
* @date 2022/11/20 08:20
* @desc
*/
@RjnetworkDircetive("eqTestDircetive")
@Slf4j
@Component
public class EqTestDircetive extends RjnetworkDirectiveBase {

private static IQixiaozhuDictService iQixiaozhuDictService;

@Resource
public void setiQixiaozhuDictService(IQixiaozhuDictService iQixiaozhuDictService){
EqTestDircetive.iQixiaozhuDictService = iQixiaozhuDictService;
}

@Override
public void exec(Env env, Scope scope, Writer writer) {
log.info("数据为{}",EqTestDircetive.iQixiaozhuDictService);
LambdaQueryWrapper<QixiaozhuDict> dictLambdaQueryWrapper = new LambdaQueryWrapper<>();

scope = new Scope(scope);
scope.set("list",iQixiaozhuDictService.list());
scope.getCtrl().setLocalAssignment();
this.exprList.eval(scope);
this.stat.exec(env, scope, writer);
}

@Override
public boolean hasEnd() {
return true;
}
}
1233

#eqTestDircetive()
#(list??)
#end

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
JFinal使用技巧-项目启动时自动检查升级数据库内容插件
Java技术:SpringBoot实现邮件发送功能
​SpringBoot整合freemarker、thymeleaf模版引擎
2020年首发:vue-实验-框架实验+弹窗实验
详解模板渲染引擎 jinja2
Flask 使用小结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服