您的位置:首页 > 编程语言 > Java开发

Jeecg中使用<t: dgCol>标签的自动构造查询条件时出现类型转换错误的解决办法。

2016-04-15 00:00 906 查看
当数据库字段的类型为数字型,如为 Integer 类型时,如果把该字段设置为查询条件,并且为范围查询,如下:
<t:dgCol title="price" field="price" query="true" queryMode="group"></t:dgCol>

其中数据 price 在数据库中为 int 型,实体类为 Integer 类型的,这时生成的界面如下图:



此时若输入数值型的字符时,会抛出 java.lang.ClassCastException 。因为输入的值是 String 类型的,而在实体类中是 Integer类型的,而 Jeecg 平台在 org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil 类的 installHqlJoinAlias 方法中拼装查询条件时没有根据字段的类型来判断,原代码为‍:
// 添加 判断是否有区间值
String beginValue = null;
String endValue = null;
...
// 此处并没有判断当前字段的类型,统一传入String类型的值,因此当字段类型为数值型时会出错
ObjectParseUtil.addCriteria(cq, aliasName, HqlRuleEnum.GE, beginValue);
ObjectParseUtil.addCriteria(cq, aliasName, HqlRuleEnum.LE, endValue);

解决方案可以是单独写个 addCriteria 方法来判断当前字段的类型,并作出类型转换:
//自定义的addCriteria方法
private static void addCriteria(String value, CriteriaQuery cq, String aliasName, HqlRuleEnum rule, String type) {
if (StringUtil.isNotEmpty(value)) {
if (type.equals("class java.lang.Integer")) {
ObjectParseUtil.addCriteria(cq, aliasName, rule, new Integer(value));
} else {
ObjectParseUtil.addCriteria(cq, aliasName, rule, value);
&nbs
7fe0
p;      }
}
}

再将原 installHqlJoinAlias 方法修改,修改后的代码如下:
HqlGenerateUtil.addCriteria(beginValue, cq, aliasName, HqlRuleEnum.GE, type);
HqlGenerateUtil.addCriteria(endValue, cq, aliasName, HqlRuleEnum.LE, type);
//ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.GE, beginValue);
//ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.LE, endValue);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息