gpt4 book ai didi

java - 在javascript中调用的Struts2 Action 无法获取 session 对象

转载 作者:行者123 更新时间:2023-12-02 08:06:19 25 4
gpt4 key购买 nike

我有一个从 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 将执行一个尝试获取 session 对象的方法:

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()”,但无法获取 session userID。

我尝试通过在地址栏中绑定(bind) 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接口(interface),它也不起作用。

任何人都可以帮忙指出为什么在函数 uploadFile() 中 session 不起作用的问题吗?

更多信息:这是我调用的将用户置于 session 中的函数:

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 时是否可能创建一个单独的 session ?结果我们无法在新 session 中获取用户,因为我们在旧 session 中设置了它?

谢谢虚园

最佳答案

试试这个,在你的脚本url后面添加jsessionid参数。

<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>

关于java - 在javascript中调用的Struts2 Action 无法获取 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com