我自定义了一个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
jfinal 3.3 提供了 #number 指令,比你现在的用法简单太多了,在俱乐部找我要一下 #number 指令的代码,可以先用上