Beetl模板的一个BUG 在配合Groovy的时候发现的.

发布于 2021-11-22 11:01:21 字数 1094 浏览 731 评论 10

@闲.大赋 上周在用groovy配合nutz写测试代码时发现一个Bug 直接上代码

Configuration cfg = Configuration.defaultConfiguration();
        ResourceLoader resourceLoader = new FileResourceLoader("e:\");
        GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
        //循环模拟nutz的BeetlView的输出逻辑,一般情况下第1次正常 后面的报错
        for (int i = 0; i < 5; i++) {
            Template t = gt.getTemplate("test.html");
            Map map=new LinkedHashMap();//groovy 默认的MAP是这个.HashMap就没有问题..
            List ls=new ArrayList();
            ls.add(new Point(1,2));
            ls.add(new Point(2,3));
            map.put("ls", ls);
            map.put("p",new Point(4,5));
            t.binding("obj",map);
            t.renderTo(System.out);
        }
test.html


${obj.p.x}

<% for (point in obj.ls){%>
${point.x}
<%}%>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

风柔一江水 2021-11-25 13:51:44

beetl2 的api文档我将在正式版推出的时候推出,请关注

时光清浅 2021-11-25 13:51:37

嗯,提交了 https://github.com/nutzam/nutz/issues/660

需要补全文档

坚持沉默 2021-11-25 13:51:35

原来是这样子..文档上没有的东西,除了看源码剩下就是问Wendal了..m(-_-m)~

路还长,别太狂 2021-11-25 13:51:25
//默认情况下, 如果返回一个对象
String abc = "123";
// 效果相当于
resp.setAttr("obj", "123");

//如果要返回多个,可以用Context
Context ctx = Lang.context();
cxt.set("abc", "123");
ctx.set("vvv", "1233");
return ctx;

//这样就会解开, 效果相当于分别设置到
req.setAttr("abc", "123");
req.setAttr("vvv", "123");

泛滥成性 2021-11-25 13:50:54

整个模板的变量都在obj里,因为nutz的action方法把返回的对象放到obj里,需要返回多个变量的时候我都是用map的. @wendal有什么好的建议没有??

噩梦成真你也成魔 2021-11-25 10:57:07

回复
我怎么觉得就有binding(Map obj) 就可以了

回忆凄美了谁 2021-11-25 10:36:45

回复
看了一下 有个bind(name,value,dynamic)接口貌似和direct dynamic varName 重复了..二选一的话我也觉得只保留bind(Map)就行..

累赘 2021-11-25 09:55:46

感谢即时的回复 第2,3种比较靠谱,第一种方法不太适合nutz.. 再详细问一下 第2,3中方法 哪种性能损失更大?

丢了幸福的猪 2021-11-25 06:35:47

错误原因是因为binding的时候,map里的类型其实是动态的,Beetl的引擎默认认为类型是一致的。目前看来,有三种方式解决:

1 分别赋值,t.binding("ls",ls);t.binding("p",p);
2 采用类型申明,表示它是动态的,比如在模板里,采用如下俩种方式

  • <%
    directive dynamic obj;
    %>

3 采用普通引擎 就是配置ENGINE=org.beetl.core.engine.DefaultTemplateEngine

 

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文