У меня есть действие 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, он просто печатает «в функции uploadFile ()», но не может получить идентификатор пользователя сеанса.
Я попытался вызвать Upload.action явно, привязав URL-адрес в адресной строке:
«http://localhost:8080/observationData/Upload.action
», на этот раз я могу получить идентификатор пользователя сеанса.
Я использую стойки2.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? В результате мы не можем получить пользователя в новом сеансе, потому что мы установили его в старом сеансе?
Спасибо
Xuyuan