2013-01-09 19 views
0

我有這樣的代碼:GAE會話不相同的行爲離線或在線

private String delete(HttpServletRequest req, HttpServletResponse res, Seller seller) throws Exception { 

    //check data 
    if(req.getParameter("equipmentId") == null) { 

    throw new Exception("equipmentId undefined"); 

} 

//build 
Equipment equipment = new Equipment(Integer.parseInt(req.getParameter("equipmentId"))); 

//delete 
dbEquipment.delete(equipment); 

//remove in array list 
for(int i = 0; i < seller.getListEquipment().size(); i++) { 

    if(seller.getListEquipment().get(i).getId() == equipment.getId()) { 

     seller.getListEquipment().remove(i); 

    } 

} 

//response 
return "ok"; 

}

傳遞的賣方屬性是在HttpSession:((賣方)req.getSession()。 getAttribute(「user」))

此代碼更新我的對象賣家很好離線但在線更新不顯示,它仍然是舊對象/ ArrayList。

回答

1

嘗試保存對象返回到會話更新它的內容之後。

+0

好吧我要試試這個,但我不明白爲什麼我必須做到這一點。謝謝;) –

+0

不錯,這是工作 - >但絕對是谷歌App Engine/Java/Session中的一個* bug *。在HRD系統上進行會話時可能會出現錯誤... –

+0

爲什麼你認爲這是一個錯誤?會議應該如何知道你改變了對象的內容? –

0

在你的AppEngine-web.xml中添加此行:

<sessions-enabled>true</sessions-enabled> 

我不知道,但是這對我來說是重複的錯誤。 :P

另外,您需要確保您要保留到會話中的所有對象都實現java.io.Serializable接口。對象需要可序列化的原因是App Engine將會話數據存儲在數據存儲和memcache中。由您在會話中放入的值引用的任何對象都必須是可序列化的,因此整個對象圖都可用。我發現有趣的是,它必須以基於事務的方式提交會話數據,因爲我也在會話中存儲了一個字符串,並且這個字符串也沒有被保存。如果對象不可序列化,則應用程序不會在本地開發機器中失敗,但在部署到雲時將失敗。

來源:http://afewguyscoding.com/2011/02/httpsession-google-app-engine/

+0

是的,它已啓用 –

+0

它工作?可序列化的東西? –

+0

沒有它啓用之前,但謝謝你的嘗試和是的一切都是可序列化的(在會話對象) –