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

Zero__One 发布于 2012/07/06 22:52
阅读 496
收藏 0

我这用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() 返回的对象是不一样的.

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

加载中
0
Zero__One
Zero__One
问题解决了.  是flash上传组件session消失的问题.  
解决方案是: 在初始化上传组件的时候uploader属性赋值为 actionName.action;jsessionid=<%=session.getId()%>,这样可以获取sessionId 并用url方式传递给服务端正确的判断是那个session.
返回顶部
顶部