[英]Struts2 action which is called in javascript cannot get session object
我有一個struts2動作,從javascript調用(javascript使用uploadify上傳多個文件):
<script type="text/javascript"> $(document).ready(function() { $("#fileupload").uploadify({ 'uploader' : '<%=path%>/js/uploadify-v2.1.4/uploadify.swf', 'script' : 'observationData/Upload.action', ...... }); }); </script>
Upload.action將執行一個嘗試獲取會話對象的方法:
public class ObservationDataAction extends ActionSupport{ ...... public String uploadFile() throws Exception { System.out.println("in function uploadFile()"); ...... Map session = ActionContext.getContext().getSession(); System.out.println("Session userID is:"+((SessionUser)session.get("authority.userinfo")).getUserID()); return null; } }
但是當javascript調用Upload.action時,它只是打印“in function uploadFile()”但無法獲取會話userID。
我嘗試通過在地址欄中綁定URL來顯式調用Upload.action:“ http://localhost:8080/observationData/Upload.action
”,這次我可以獲得會話userID。
我正在使用struts2.1.6。
這是我的struts.xml:
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <constant name="struts.action.extension" value="action"/> <package name="observationData" namespace="/observationData" extends="struts-default"> <action name="Upload" class="observationDataAction" method="uploadFile"> </action> </package> <struts>
我使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter作為過濾器類。
我也試圖實現SessionAware接口,它既不起作用。
任何人都可以幫助指出問題為什么在函數uploadFile()會話不起作用?
更多信息:這是我調用以將用戶置於會話中的函數:
public static final String SESSION_USERINFO = "authority.userinfo";
private static void saveSessionUser(SessionUser sessionUser) {
Map session = ActionContext.getContext().getSession();
session.put(SESSION_USERINFO, sessionUser);
}
嗨,我正在考慮一種可能性: Ajax / JS在調用Upload.action時是否可能創建一個單獨的會話? 結果我們無法讓用戶進入新會話,因為我們在舊會話中設置了它?
謝謝徐源
Uploadify使用flash。 每個Flash應用程序都會啟動一個新會話 因此,由於新會話已啟動,您將丟失之前的每個會話設置。 您可以通過將id session傳遞給uploadify來嘗試解決方法。 假設您使用的是Java,您可以這樣做:
$("#uploadify_div).uploadify("settings", "formData", {"idSession",<%=session.getId()%>});
在您的操作或servlet中檢索通過uploadify傳遞的id會話並恢復正確的會話,但是沒有API,您需要通過映射id = session對象來實現自己的會話。
希望對你有所幫助。
試試這個,在你的腳本url之后添加jsessionid param。
<script type="text/javascript">
$(document).ready(function() {
$("#fileupload").uploadify({
'uploader' : '<%=path%>/js/uploadify-v2.1.4/uploadify.swf',
'script' : 'observationData/Upload.action?jsessionid=<%=session.getId()%',
......
});
}); </script>
由於uploadify使用Flash上傳文件,我的建議是檢查您的Flash插件或Flash的某些配置是否有問題。 - 在另一台計算機上有同樣的問題嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.