【发布时间】:2011-11-14 02:40:09
【问题描述】:
我有一个从 javascript 调用的 struts2 动作(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()”但无法获取会话用户 ID。
我尝试通过在地址栏中绑定 url 来显式调用 Upload.action:
“http://localhost:8080/observationData/Upload.action”,这次可以拿到session 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 时是否可以创建单独的会话?结果我们无法让用户进入新会话,因为我们在旧会话中设置了它?
谢谢 旭源
【问题讨论】:
-
能否在#1 和#2 中添加sn-ps 的代码格式?
-
您发出 Ajax 请求的站点是否与 S2 应用在同一个域中?
-
@stratwine:抱歉,这是我第一次使用 stackoverflow。我已经改进了它。谢谢!
-
@DaveNewton:请求“observationData/Upload.action”是从与 S2 应用程序相同的域发送的。
-
您确认正在发送会话cookie吗?
标签: java javascript ajax struts2 uploadify