1. 程式人生 > >jsp出現cannot be resolved 問題

jsp出現cannot be resolved 問題

ima 是否 abc getname 問題 刪掉 分享圖片 href tomcat6

今天接手一個09年的老項目,這個項目是Struts2的,早就忘光了,配置文件也一大堆,廢了老大勁解決出現的錯誤,跑起來了,登錄成功後跳轉到首頁出現500錯誤,報錯:“org.apache cannot be resolved or is not a field”
如圖所示:
技術分享圖片

根據這個提示應該是EL表達式${ctxpath}沒有定義
但是報錯地方上面也有用${ctxpath}的地方,例如:

<link href="${ctxpath}/jsp/newframe/themes/default/style.css" rel="stylesheet" type="text/css" media="screen"/>
<link href="${ctxpath}/jsp/newframe/themes/css/core.css" rel="stylesheet" type="text/css" media="screen"/>

這就特別奇怪了。

於是我初步懷疑是不是因為EL在javascript裏會出錯,找了半天還是沒有找到相關的解決辦法,直到我逐條把js代碼都刪掉,最後只剩下一個EL表達式變量了,但是還是報錯。
沒辦法了,只能懷疑tomcat版本太高的緣故,更換為tomcat6後,錯誤依然。
於是我還得逐步調試,終於發現問題所在^_^。
原因是在報錯代碼之前有一段java程序,把java程序去掉就不會出現500錯誤,難道這段java代碼會把${ctxpath}的值刪掉?
又逐條檢查發現一個讀取session的語句有問題

Organization org = (Organization)request.getSession().getAttribute(“abc”);
    if(org!=null){
        dept = org.getName();
    }

這句話看起來挺正常的,但是request.getSession().getAttribute(“abc”)的值為null,按照我理解若是null的話轉換為任何對象不會報錯,但是實際上在jsp裏出現錯誤了,但是又不輸出錯誤。這樣導致jsp無法被編譯,從而導致上面的EL表達式${ctxpath}找不到

最後解決辦法有兩種:
1.在登錄的代碼裏添加上這個session,保證不能為空
2.先判斷是否為null然後再強轉類型

jsp出現cannot be resolved 問題