jsp出現cannot be resolved 問題
阿新 • • 發佈:2018-08-02
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 問題