標籤:
J2EE進階(十一)SSH架構整合常見問題匯總(二)
問題8
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
解決
資料庫中userdetail表的對應檔如下,可見xb欄位資料類型為boolean類型,而自己在userdetail模型類中定義的類型為String類型。為此可以得出這樣的結論。模型類中的資料及類型必須與資料表對應檔中的欄位資訊保持一致。應該可以同時產生pojo類和對應檔,只是自己當時進行項目設定時沒有進行相應的設定,從而招致後期錯誤的不斷出現。
問題9
org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of cn.edu.ujn.model.User.orderses
解決
初步懷疑是資料表對應檔出的問題。User.hbm.xml檔案存在以下內容:
<set name="orderses" inverse="true"> <key> <column name="userid" /> </key> <one-to-many class="cn.edu.ujn.model.Orders" /> </set>
通過參考課本,得知Set集合屬性需要使用<Set.../>元素進行映射,使用<key.../>元素映射外鍵列,用於保證持久化類和集合屬性的關聯。Hibernate映射Set集合屬性時應指定映射表名,即以上代碼應更改為
<set name="orderses" table="orders" inverse="true"> <key> <!-- 指定外鍵欄位的列名 --> <column name="userid" /> </key> <one-to-many class="cn.edu.ujn.model.Orders" /> </set>
從以上定義可知,變數orserses應為Set集合資料類型,應定義為private Set<String> orderses = new HashSet<String>();同時設定其get、set方法。而自己之前將其定義為了String類型,導致get時探索資料類型不一致而報錯。
經過以上更改,當使用者輸入正確的使用者名稱與密碼時即可登入到正確的頁面。
問題10
明明在jsp檔案內調用了js方法,但是始終沒有效果。
解決
經過調試直接在js檔案內執行alert("測試");快顯視窗,而Window.alert("測試");卻沒有快顯視窗,經過網上一番搜尋,也沒有找出合理的解釋。將彈窗改為alert();之後,問題得以解決。
問題11
jsp頁面中存在語句:<s:property value="#request.msg"/>,其中request為action中所定義的變數。
Map request = (Map) ActionContext.getContext().get("request");
request.put("request", "舊密碼錯誤,請重新輸入");
但是當自己的舊密碼輸錯時,錯誤提示總是不會顯示。
解決
再次對照視頻發現原來是自己將代碼敲錯了,o(︶︿︶)o 唉,不知為不過啊!其實之前自己就看著代碼不對勁。正確代碼如下:
Map request = (Map) ActionContext.getContext().get("request");request.put("msg", "舊密碼錯誤,請重新輸入");
問題12
在設定分頁操作時,總是會出現不能正確顯示現象。如所示:
Jsp頁面代碼如下:
<s:iterator value="#request.catalogs" id="catalog"> <a href="browseFlowerPagingAction.action?catalogid=<s:property value="#catalog.catalogid"/>¤tPage=1" target="_self"><s:property value="#catalog.catalogname"/> </a> <br><br> </s:iterator>
解決
再次對照視頻,也沒有發現有什麼紕漏的地方。而且地址欄顯示為
http://localhost:8088/flowerGift/browseFlowerPagingAction.action?catalogid=3¤tpage=1,但是console控制台顯示page.currentPage:2。這就令自己很是費解了。明明設定的是從第一頁開始顯示的,為何就不見效果呢?
通過仔細觀察代碼發現,原來變數currentPage錯寫為了currentpage一字之差啊。這裡的currentPage本是Page類中的成員變數。當初自己太粗心了,導致後期檢查錯誤特別吃力。O(︶︿︶)o 唉,自己挖的坑還得坑自己啊,到頭來還得自己填坑。
<s:iterator value="#request.catalogs" id="catalog"> <a href="browseFlowerPagingAction.action?catalogid=<s:property value="#catalog.catalogid"/>currentPage=1" target="_self"><s:property value="#catalog.catalogname"/> </a> <br><br></s:iterator>
問題13
在進行訂單提交操作時,出現了一下錯誤提示:
解決
初步判定是由model中變數類型與資料表對應檔中的資料類型不一致造成的。這個問題與問題5和問題9比較相似。經過尋找,發現OrderItem中的flowerid為int類型,而與Flower中的flowerid資料類型Integer不同,更改之後,問題得以解決。有關Integer與int資料類型的區別,詳見注4。
問題14
提交訂單操作時,發現jkxyshsflower.orders表資料寫入沒有問題,但是與訂單相關聯的jkxyshsflower.orderitem表中flowerid的值卻沒有寫入,此問題與問題6頗為相似,均涉及到了表的級聯操作問題。問題6迄今尚未得到解決。其中orders資料表的對應檔內容如下:
其中,在映射set集合時,配置項如所示。注意其中使用了級聯屬性cascade=“all”。視頻中的資料寫入沒有任何問題,但是自己實踐時卻出現了無法寫入的情況。
jkxyshsflower.orders表
jkxyshsflower.orderitem表
解決
經過查看程式,發現果然還是對應檔配置錯誤出現的問題,最好的方法就是利用Hibernate的反向工程功能,自動產生資料表對應model類及映射設定檔。具體方法參見博文《J2EE進階(七)利用SSH架構根據資料表建立model類》。這樣問題6同樣得到解決。
jkxyshsflower.orders表
jkxyshsflower.orderitem表
問題15
在掛失解掛使用者時,出現了如下錯誤提示:
解決
manageUser.jsp部分代碼如下:
哪哪都是戲,不知怎麼的,程式突然又可以了。及時重啟服務、清緩衝是常做的工作。
美文美圖
J2EE進階(十一)SSH架構整合常見問題匯總(二)