freemarker自定义指令

指令方法

Freemarker中自定义指令需要实现TemplateDirectiveModel接口,并实现execute方法

//使用注解方式,这里也可以使用spring的bean的方式
    @Service
    public class RoleDirectiveModel implements TemplateDirectiveModel {

        /**
         * @param environment           环境变量,如果在开发复杂功能的是时候,可能会用到该参数
         * @param map                   指令参数
         * @param templateModels        指令变量
         * @param templateDirectiveBody 指令内容
         * @throws TemplateException
         * @throws IOException
         * 这里的参数除了Body不能为空外,其他都能为null
         */
        public void execute(Environment environment,
                            Map map,
                            TemplateModel[] templateModels,
                            TemplateDirectiveBody templateDirectiveBody)
                throws TemplateException, IOException {
            //获取指令的参数,这里需要先转化为TemplateScalarModel类型
            TemplateScalarModel user = (TemplateScalarModel) map.get("user");
            TemplateScalarModel password = (TemplateScalarModel) map.get("password");
            //使用getAsString()将TemplateScalarModel类型的参数转成string类型
            System.out.println(user.getAsString()+":"+password.getAsString());
            List<String> role = new ArrayList<String>();
            if(user.getAsString().equals("admin") && password.getAsString().equals("123")){
                templateModels[0] = TemplateBooleanModel.TRUE;
                role.add("save");
                role.add("delete");
            }else{
                role.add("你没有权限!");
            }
            //使用SimpleSequence将list转化为模板序列
            templateModels[1] = new SimpleSequence(role,null);
            //输出内容
            templateDirectiveBody.render(environment.getOut());
        }
    }

配置

自定义指令,还需要在freemarkerConfig中添加

     <property name="freemarkerVariables">
        <map>
            <!--role:指令名
                value-ref:使用的指令方法,即上面定义的类-->
            <entry key="role" value-ref="roleDirectiveModel"></entry>
        </map>
    </property>

action页面跳转

@RequestMapping("/role")
    public String role(){
        return "role";
    }

页面引用自定义指令

user、password为入参,入参是使用key,value形式,如果有多个入参,直接跟在后面写,使用空格隔开。与出参使用分号隔开。
result1,result2:为出参,多个出参之间使用逗号

<@role user='admin' password='123';result1,result2>
        <#if result1>
            用户名是:admin;
        </#if></html></br>
        权限有:
        <#list result2 as item>
            ${item}
        </#list>
    </@role>

方法获取到的参数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值