beetl 模板问题
@闲.大赋 你好,想跟你请教个问题:
我现在有两个实体类,两个实体类的属性名称,但类型不一样,在使用beetl时,使用同一个数据模板,程序根据数据传入不同的实体类,比如:
模板
data是个Map key 是Integer value 根据类型可能是IndicatorDataNum 或者 IndicatorData 类形
<tr> <td colspan="2" style="width: 124px;height: 17px;" class="a592167735D68578B951BD5A06B00DB91" rowHid="13" colHid="0" readHid="true">项目开工时间 </td> <td colspan="5" style="width: 310px;height: 17px;" class="a287B02DC9C8468352434D5A1D2B4B2D5" rowHid="13" colHid="2" readHid="false" indicatorId="411"> <input type="text" name="411.current" value="${data[411].current!}" id="row-13-f3" class="text " indicator-name="项目开工时间" indicator-desc=""/> </td> <td colspan="2" style="width: 124px;height: 17px;" class="a592167735D68578B951BD5A06B00DB91" rowHid="13" colHid="7" readHid="true">投产时间 </td> <td colspan="4" style="width: 248px;height: 17px;" class="a287B02DC9C8468352434D5A1D2B4B2D5" rowHid="13" colHid="9" readHid="false" indicatorId="412"> <input type="text" name="412.current" value="${data[412].current!}" id="row-13-f10" class="text " indicator-name="投产时间" indicator-desc=""/> </td> </tr> <tr> <td colspan="2" style="width: 124px;height: 17px;" class="a592167735D68578B951BD5A06B00DB91" rowHid="14" colHid="0" readHid="true">达产时间 </td> <td colspan="11" style="width: 682px;height: 17px;" class="a287B02DC9C8468352434D5A1D2B4B2D5" rowHid="14" colHid="2" readHid="false" indicatorId="413"> <input type="text" name="413.current" value="${data[413].current!}" id="row-14-f3" class="text " indicator-name="达产时间" indicator-desc=""/> </td> </tr>
实体类
@Data public static class IndicatorData { /** 本期 */ private String current; /** 上期 */ private String prior; /** 1(月,季)-本期 */ private String currentTotal; /** 1(月,季)-上期 */ private String priorTotal; /** 上年同期 */ private String lastYearCurrent; /** 上年1(月,季)-上年同期 */ private String lastYearCurrentTotal; } @Data public static class IndicatorDataNum { /** 本期 */ private Integer current; /** 上期 */ private Integer prior; /** 1(月,季)-本期 */ private Integer currentTotal; /** 1(月,季)-上期 */ private Integer priorTotal; /** 上年同期 */ private Integer lastYearCurrent; /** 上年1(月,季)-上年同期 */ private Integer lastYearCurrentTotal; }
java.lang.ClassCastException: cn.**.IndicatorData cannot be cast to cn.**.IndicatorDataNum at cn.**.IndicatorDataNum_current.value(Unknown Source) at org.beetl.core.statement.VarAttribute.evaluate(VarAttribute.java:59) at org.beetl.core.statement.VarRef.evaluate(VarRef.java:127) at org.beetl.core.statement.PlaceholderST.execute(PlaceholderST.java:32) at org.beetl.core.statement.Program.execute(Program.java:70) at org.beetl.core.Template.renderTo(Template.java:123) at org.beetl.core.Template.renderTo(Template.java:89)
下面是简单的例子也报错
//模板 String templateStr = "${data[1].current!}"; Map<Integer, IndicatorData> tempData = Maps.newHashMap(); IndicatorData d = new IndicatorData(); d.current = "strCurrent"; tempData.put(1, d); for (int i = 0; i < 5; i++) { Template template = gt.getTemplate(templateStr); template.binding("data", tempData); System.out.println(template.render()); } //到这里渲染都可以成功 Map<Integer, IndicatorDataNum> numdDta = Maps.newHashMap(); IndicatorDataNum numData = new IndicatorDataNum(); numData.current = 120; numdDta.put(1, numData); //到这里就报错了 for (int i = 0; i < 5; i++) { Template template = gt.getTemplate(templateStr); template.binding("data", numdDta); System.out.println(template.render()); } 错误信息 java.lang.ClassCastException: lulu.code_lab.framework.beetl.HelloWorldTest$IndicatorDataNum cannot be cast to lulu.code_lab.framework.beetl.HelloWorldTest$IndicatorData at lulu.code_lab.framework.beetl.HelloWorldTest$IndicatorData_current.value(Unknown Source) at org.beetl.core.statement.VarAttribute.evaluate(VarAttribute.java:59) at org.beetl.core.statement.VarRef.evaluate(VarRef.java:127) at org.beetl.core.statement.PlaceholderST.execute(PlaceholderST.java:32) at org.beetl.core.statement.Program.execute(Program.java:70) at org.beetl.core.Template.renderTo(Template.java:137) at org.beetl.core.Template.renderTo(Template.java:90) at org.beetl.core.Template.render(Template.java:77)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我的页面很多,directive dynamic xxxx; 这个感觉比较麻烦
你也可以取消此默认设置 取消哪个设置
你也可以取消此默认设置,不过一般只有少数页面是这样,用
dynamic 就可以了
得申明绑定类型是动态的,beetl默认假设绑定是静态的,你需要在模板使用此变前:
directive dynamic xxxx;
xxx 是变量名,具体可以参考文档2.25