Struts2 这个奇怪的问题怎么解决?
我这用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题解决了. 是flash上传组件session消失的问题.
解决方案是: 在初始化上传组件的时候uploader属性赋值为 actionName.action;jsessionid=<%=session.getId()%>,这样可以获取sessionId 并用url方式传递给服务端正确的判断是那个session.