10
回答
jfinal 的getInt("字段名")错误
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

我在session里藏了一个user  user里有一个int型的字段 我先从session里获取到这个user  

再user.getInt("字段名")报runtimeexception错误

改成user.getLong("字段名")也是报这个错 改成user,getNumber("字段名")我用Integer接收直接编译不通过  

用user.getStr("字段名")用String类型接收也不行  求大神指点

举报
共有10个答案 最后回答: 2年前

由jfinal 的底层可以看出来 

getInt  》》 

/**
* Get column of mysql type: int, integer, tinyint(n) n > 1, smallint, mediumint
*/
public Integer getInt(String column) {
return (Integer)getColumns().get(column);
}

/**
* Get column of mysql type: int, integer, tinyint(n) n > 1, smallint, mediumint
*/
public Integer getInt(String column) {
    return (Integer)getColumns().get(column);

}

getColumns()   》》

public Map<String, Object> getColumns() {
if (columns == null) {
if (DbKit.config == null)
columns = DbKit.brokenConfig.containerFactory.getColumnsMap();
else
columns = DbKit.config.containerFactory.getColumnsMap();
}
return columns;
}

由此可以看出 Record其实就是个map   然后从map 中通过KEY 获取数据,但是获取后 用了 integer 强转,这时候如果获取到的数据为空 或者是字符串 都会抛异常的

--- 共有 2 条评论 ---
伤心的布鱼回复 @我自横刀微笑 : 不可能的,除非你的user 失效了 2年前 回复
我自横刀微笑我这个user是从session里取得 这个字段数据库里也是有值得 2年前 回复

    具体报什么错? 接收这个变量值的类型用的是什么?  是 Integer 还是 int ? 例如:

Integer value = user.getInt(...) 还是

int value = user.getInt(...);

--- 共有 1 条评论 ---
我自横刀微笑大神 我在下面发了错误提示 您看一下 2年前 回复

后台使用的强制转换,建议自己扩展一下方法。

	public int getInt(String name, int defaultVal) {
		String val = getPara(name);
		if (val == null || !val.matches("^-?\\d+$"))
			return defaultVal;
		return Integer.parseInt(val);
	}



--- 共有 4 条评论 ---
费振龙@我自横刀微笑 我这个意思,先按字符取,然后判断是否是数字,如果不是数字返回默认值! 2年前 回复
我自横刀微笑@费振龙 奥 谢谢 我再琢磨琢磨你写的这个 2年前 回复
费振龙@我自横刀微笑 对,我对他这个方法扩展了一个获取int 2年前 回复
我自横刀微笑你这是jfinal? 2年前 回复

引用来自“我自横刀微笑”的评论

控制台不报错  页面报500 我用debug跟踪了一下跑runtimeexception异常

   异常信息是否是 NullPointerException?  只要弄清楚下面的事情就知道错误原因了:


// 导致异常的根本原因
Integer value = null;
int valueInt = value;   // 此时会抛出异常

// 上面原因的变形
Integer value = null
if (value == 0)     // 此时也会抛出异常
  //code here

    

    上面的基础知识弄清楚以后,回到你的程序中:

// 此处如果 user.getInt("n_role") 返回值为 null,则会报异常
if (user.getInt("n_role") == 0)
   // code here

    本质上就是 null 值无法赋给 int、boolean、long、double 这类 primitive type,只能赋给 Integer、Boolean、Long、Double 这类包装类型的对象。

--- 共有 1 条评论 ---
我自横刀微笑我可以确定我的字段中是有值的 不过还是谢谢你 2年前 回复

    很明显,就是null转换失败,不要那么肯定你的参数一定有值,代码是不会骗人的。你只看到了数据库里有值,但是你代码里,内存里有值吗?

  debug大法,看右边的所有变量的值

--- 共有 2 条评论 ---
我自横刀微笑嗷嗷 谢谢 2年前 回复
littleant如果按他说的getInt、getLong、getNumber都报错的话,那必定是null值问题 2年前 回复
问题已经解决了  错误主要原因是前段的easyui  的datagrid对应的必须是表的字段  我当时在后台把表的字段取出来转换为我自己写的一个实体类 然后把是实体类的属性对应datagrid  我以为可以 但是不可以 一定要对应表的字段才行  而easyui的tree可以对应实体类的属性   感谢各位
--- 共有 1 条评论 ---
supergfoxeasyui 一点也不easy。 2年前 回复
顶部