Security Manage系統(tǒng)中新增功能時(shí)報(bào)“未知異常”,后來在本地測(cè)試看Log信息知道是“空指針異常”,然后定位到拋出異常的位置:
iFuncNo = iFuncNo + 1;
然后單步調(diào)試,發(fā)現(xiàn)iFuncNo為Null,所以操作時(shí)會(huì)報(bào)空指針異常,這是iFuncNo的賦值語句:
List list = functionDao.selectByParentId(functionVo.getParentId());
if (list != null && list.size() > 0) {
Functiontb functb = (Functiontb) list.get(0);
iFuncNo = functb.getFunctionNo();
從中可以看出,iFuncNo是一個(gè)Functiontb的屬性,而且可能為空,如果不加判斷直接用操作符對(duì)它進(jìn)行操作,會(huì)報(bào)“空指針異常”。if (list != null && list.size() > 0) {
Functiontb functb = (Functiontb) list.get(0);
iFuncNo = functb.getFunctionNo();
iFuncNo用于菜單的排序,因?yàn)椴藛问莿?dòng)態(tài)生成的,根據(jù)權(quán)限不同,看到的菜單也不同,而且應(yīng)該可以根據(jù)客戶的要求對(duì)菜單排序,所以增加了這個(gè)字段,但是由于這個(gè)字段是后來新增的,所以數(shù)據(jù)庫中的某些記錄該字段的值為空。在程序中先判斷一下就可以了,如果為空,就置為0;
List list = functionDao.selectByParentId(functionVo.getParentId());
if (list != null && list.size() > 0) {
Functiontb functb = (Functiontb) list.get(0);
iFuncNo = functb.getFunctionNo();
if (null == iFuncNo) {// 如果資料庫中該欄位的值為null,則先置為0
iFuncNo = 0;
}
iFuncNo = iFuncNo + 1;
}
這樣就OK了。if (list != null && list.size() > 0) {
Functiontb functb = (Functiontb) list.get(0);
iFuncNo = functb.getFunctionNo();
if (null == iFuncNo) {// 如果資料庫中該欄位的值為null,則先置為0
iFuncNo = 0;
}
iFuncNo = iFuncNo + 1;
}
2、季帳單的團(tuán)體險(xiǎn)及意外險(xiǎn)部分的數(shù)據(jù)在生成的PDF報(bào)表中看不到。
原因:手工輸入數(shù)據(jù)時(shí),弱體等級(jí)(標(biāo)準(zhǔn)體、次標(biāo)準(zhǔn)體)欄位不是必填的,也就是說值可以為空,但是我生成報(bào)表時(shí)是按照這兩種弱體等級(jí)來生成報(bào)表的,所以沒有在報(bào)表中。就好像一個(gè)公共廁所,上面寫著“男”和“女”,這時(shí)候來了一個(gè)性別為“空”的人,我肯定不好讓“他/她”進(jìn)其中的任何一個(gè)地方了。
今天要客戶確認(rèn)一下怎么處理!