@闲.大赋 你好,想跟你请教个问题:
我现在有两个实体类,两个实体类的属性名称,但类型不一样,在使用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;这个感觉比较麻烦
你也可以取消此默认设置 取消哪个设置