@闲.大赋 你好,想跟你请教个问题:
我现在有两个实体类,两个实体类的属性名称,但类型不一样,在使用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)
<p>
<br>
</p>
<p>
<br>
</p>
得申明绑定类型是动态的,beetl默认假设绑定是静态的,你需要在模板使用此变前:
directivedynamicxxxx;
xxx是变量名,具体可以参考文档2.25
我的页面很多, directivedynamicxxxx;这个感觉比较麻烦
你也可以取消此默认设置 取消哪个设置
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。