Struts2 这个奇怪的问题怎么解决?

发布于 2021-11-13 11:28:14 字数 1867 浏览 821 评论 1

我这用ssh框架做了个上传文件的web应用.上传组件为:struts2+uploadify, 上传完毕后客户端那边获取不到Strus2 Action 返回的json结果.  所以我在添加了个action专门提供上传好的文件属性和一些附加数据给客户端, 用Json传递.  这个时候出现了个奇怪的问题:

上传好后返回结果保存到一个对象里, 然后将这个对象保存到session里, 我试了request 里的session 和 ActionContext 里的session都是只能在上传action里有效.  在返回结果的另一个action里找不到值.  上传文件的action上次上传的文件的对象可以下次读取来. 但是别的action则读不出来.

更奇怪的是登录信息保存的对象已经保存在ActionContext.getContext().getSession()里. 这个对象可以在返回结果的action里能读取出来. 但是上传文件的action里读不出来.

上传文件的action 的execute方法:

@Override
public String execute()  throws Exception {
	Set keys = ActionContext.getContext().getSession().keySet();
	System.out.println("Key Set:");
	for(Object o:keys){
		System.out.println(o);
	}
        //fileInfo 是文件信息保存的对象
	ActionContext.getContext().getSession().put("file", fileInfo);
	String path = ServletActionContext.getServletContext().getRealPath(
			systemInfo.getImageUploadDir());
	copyFile(filedata,path +"\"+ filedataFileName);
	return SUCCESS;
}

第一次上传的时候什么都不显示, 第二次显示第一次上传文件信息对象:file
这里一直取不到用户登录信息的user对象

返回结果的action 的execute方法:

@Override
public String execute()  throws Exception {
		Set keys = ActionContext.getContext().getSession().keySet();
		for(Object o:keys){
			System.out.println(o);
		}
		Object obj = ActionContext.getContext().getSession().get("file");
		//Object obj = ServletActionContext.getRequest().getSession().getAttribute("apkInfo");
	jsonMap = new HashMap();
	if(obj!=null){
		jsonMap.put("manifest", obj);
		jsonMap.put("state","OK");
	}else{
		jsonMap.put("state", "error");
	}
	return SUCCESS;
}

执行完以后取不到刚才上传文件信息的对象, 但是能取得到登录信息的user对象
我怀疑上传文件的时候和别的时候的ActionContext.getContext() 返回的对象是不一样的.

有人遇到过同样的问题吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

恋你朝朝暮暮 2021-11-14 20:24:33

问题解决了.  是flash上传组件session消失的问题.  

解决方案是: 在初始化上传组件的时候uploader属性赋值为 actionName.action;jsessionid=<%=session.getId()%>,这样可以获取sessionId 并用url方式传递给服务端正确的判断是那个session.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文