一个很诡异的问题,求教!!!

我自定义了一个freemarker标签,代码如下:

public class MemberPrice implements TemplateDirectiveModel {
    @Override
    public void execute(Environment env, Map var2, TemplateModel[] var3, TemplateDirectiveBody body) throws TemplateException, IOException {
        // 获取标签中属性的值都是从map参数里拿的
        //输出对象通过env对象输出(流)
        //var3 循环替代变量
        //body 是自定义标签中的内容,如<@myDirective>XXXXXXXXXX</@myDirective>;当标签是<@myDirective />格式时,body=null  这个是指包含内容成为模板对象,可调用render来执行模板代码

        BigDecimal memberPrice;
        if (var2.get("price")==null){
            throw new TemplateModelException("没有设置price属性");
        }else{
            //开始计算会员价
            memberPrice = new BigDecimal(var2.get("price").toString()).multiply(new BigDecimal(WebConfig.discountRate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP);
        }

        Writer out = env.getOut();
        //out.write(memberPrice.toString());
        env.setVariable("mp",WrappingTemplateModel.getDefaultObjectWrapper().wrap(memberPrice));
        body.render(out);
        // body.render();
    }

}

然后,使用的时候:

<em class="weui-form-preview__value hyPrice">¥<@MemberPrice price=row.price>${mp}</@MemberPrice></em>

出现的问题是,当我按住刷新键不放,大概刷新到第20次左右的时候,freemarker就抛异常,提示 MemberPirce 为 Null,然后我再刷新一次,又好了,然后再刷新个几次,就又抛出这个异常,实在是搞不懂了,请教下老大是什么问题呢?

评论区

JFinal

2017-11-14 17:42

看下日志,定位一下是哪行代码出的问题

jfinal 3.3 提供了 #number 指令,比你现在的用法简单太多了,在俱乐部找我要一下 #number 指令的代码,可以先用上

flash866

2017-11-15 08:27

@JFinal 只有freemarker抛出的异常:2017-11-15 08:26:17
[ERROR]-[Thread: qtp1898220577-26]-[freemarker.log._Log4jLoggerFactory$Log4jLogger.error()]: Error executing FreeMarker template
FreeMarker template error:
The following has evaluated to null or missing:
==> MemberPrice [in template "Views/wechat/common/stuffs/stuffDetail.html" at line 108, column 61]

flash866

2017-11-15 08:44

@JFinal 多次测试发现,在刷新频率过猛的情况下,才会出现这种问题,用的是jetty

JFinal

2017-11-15 09:57

@flash866 换用 enjoy 多爽

flash866

2017-11-15 15:06

@JFinal 来不及了,而且freemarker一直都没啥问题的,项目快完工了,突然出现这样一个稀奇的bug

热门反馈

扫码入社