在SSH項(xiàng)目中進(jìn)行數(shù)據(jù)庫(kù)查詢,控制臺(tái)報(bào)錯(cuò)出現(xiàn)no Session錯(cuò)誤信息:如下圖

這里我從兩個(gè)場(chǎng)景說(shuō)明no Session問(wèn)題及其解決方案:
場(chǎng)景一:
???????? web層頁(yè)面端由easyui實(shí)現(xiàn),實(shí)體類Courier對(duì)象有set集合,集合里有FixedArea對(duì)象,下圖為Courier實(shí)體類中的set集合屬性:

頁(yè)面端發(fā)出查詢所有Courier請(qǐng)求,在web層Action中需要將從數(shù)據(jù)庫(kù)中查詢到的Courier對(duì)象集合轉(zhuǎn)成json格式數(shù)據(jù),然后再頁(yè)面端展示,此時(shí)控制臺(tái)報(bào)錯(cuò),如圖一。
原因:
???????? 在轉(zhuǎn)Courier對(duì)象為json數(shù)據(jù)格式的時(shí)候,對(duì)象中有fixedareas集合屬性,而jpa加載策略為延遲加載。在Action中轉(zhuǎn)fixedareas集合為json數(shù)據(jù),通過(guò)代理對(duì)象查詢數(shù)據(jù)庫(kù),此時(shí)Action中session已經(jīng)關(guān)閉。
解決方法:
? ? ? ? 在源頭解決,出現(xiàn)問(wèn)題是因?yàn)樵谵D(zhuǎn)fixedareas集合的時(shí)候,而在頁(yè)面端展示的數(shù)據(jù)中沒(méi)有fixedareas,所以將fixedareas集合屬性排除掉不轉(zhuǎn)json,具體做法如圖3紅框部分:

場(chǎng)景二:
???????? 從數(shù)據(jù)庫(kù)中查詢到數(shù)據(jù),在Action中數(shù)據(jù)被壓入值棧,頁(yè)面端從值棧中取數(shù)據(jù),此時(shí)控制臺(tái)報(bào)錯(cuò)。
原因:
???? 和上面場(chǎng)景原因類似,延時(shí)加載,session從數(shù)據(jù)庫(kù)中查找的對(duì)象是一個(gè)代理對(duì)象,只有id,當(dāng)在頁(yè)面端取數(shù)據(jù)時(shí),才真正進(jìn)行查詢數(shù)據(jù)庫(kù),而此時(shí)session已經(jīng)關(guān)閉。

解決方法:
?????? 采用延長(zhǎng)session的存活時(shí)間,在web.xml中配置OpenSessionInViewFilter
