Enjoy自定义指令

自定义指令可以获取到#test(id = "abc", num = 5)中的key值id和num吗?使用eval(scope)直接输出了value值abc和5

自定义指令
public class TestTag extends Directive {

   @Override
   public void exec(Env env, Scope scope, Writer writer) {
      try {
         for(int i = 0; i < exprList.length(); i++) {
            Expr expr = exprList.getExpr(i);
            writer.write("<br>" + expr.eval(scope));
         }
      }catch(IOException e) {
         e.printStackTrace();
      }
   }

}
字符串模板
public void testEngine() {
  Template template = engine.getTemplateByString("#test(id = 'abc', num = 5)");
  try {
     FileOutputStream fos = new FileOutputStream("D:\\testEnjoy.html");
     template.render(fos);
  } catch(IOException e) {
     e.printStackTrace();
  }

}
输入内容
<br>abc
<br>5


评论区

JFinal

2019-11-01 11:39

在 exec 方法中通过下面的代码获取 id 与 num 变量的值:
Integer id = (Integer)exprList.getExpr(0).eval(scope);
Integer num = (Integer)exprList.getExpr(1).eval(scope);

也可以这样来获取:
Object[] values = exprList.evalExprList();
Integer id = values[0];
Integer num = values[1];

在扩展的时候,把玩一下 exprList 、stat、scope、writer、env 这五个变量,基本上可以实现所有功能

117know

2019-11-01 13:54

@JFinal #test(id = 'abc', num = 5) abc和5都能获取 id和num这两个key怎么获取呢

117know

2019-11-01 16:01

@JFinal 找到个Assign可以实现
Assign expr = (Assign) exprList.getExpr(i);
writer.write(expr.getId() + "---" + expr.getRight());

JFinal

2019-11-01 16:56

@117know 使用单步调试法,把玩一下 exprList 、stat、scope、writer、env 这五个变量,想要的功能基本就有数了

热门反馈

扫码入社