简单session的问题,大家进来看下哈。。。。。。

yinxiaoqi 2010-12-10 10:13:43
代码太多,就贴下代码,说下问题。
解释下代码什么意思,这是我批量上传的部分代码,例如我一起上传a.doc,b.doc,c.doc这3个word文档,那么在打印System.out.println(str);后面是我自已加了个分割符★,这句话的结果是,a.doc★b.doc★c.doc★ 是这样的结果,然后我用session存起来了。。。。 session.setAttribute("filespath",str);
但是现在的问题来了,我在另一个jsp页面取值,String zlfielpath = (String)session.getAttribute("filespath");
然后打印结果是这样的,c.doc★ 取的值都是最后一个,我怀疑是在上传文件的时候,也是一条一条上传的,所以应该是后一条把前一条给覆盖了,所以session存的是最后一条记录。。。。。。
大家看下,我想把这些值都取到。。。。。。

List<?> items = upload.parseRequest(request);
FileItem item = null;
String fileName = null;
String str ="";
for (int i = 0 ;i < items.size(); i++){
item = (FileItem) items.get(i);
fileName = saveurl + File.separator + item.getName();
// 保存文件

if (!item.isFormField() && item.getName().length() > 0) {
item.write(new File(fileName));

str+=item.getName()+"★";//这里是把文档的名称拼起来,
System.out.println(str);
session.setAttribute("filespath",str);//然后用session存起来
}

}
...全文
319 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinxiaoqi 2010-12-13
  • 打赏
  • 举报
回复
问题以经解决了,谢谢大家的回复,是写到一个方法里面然后在for里面调用,就可以了,。
liuchao1989 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zn85600301 的回复:]
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里面当然只有最后一次的了
[/Quote]
确实你循环完后,只能保存最后一条数据。
yinxiaoqi 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 cysvip110 的回复:]
引用 1 楼 yaoweijq 的回复:
必然都覆盖么
在if循环里面判断下
session.getAttri...("filespath")
先看下是否为空
为空的话新建一个,值为a.doc
非空的话先取出来
然后在后面append 星号b.doc
依次类推


这样, 就用StringBuffer 再追加啊、 就因该可以啦
[/Quote]

还的别的办法吗,回头我试下。。。。stringbuffer
yinxiaoqi 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zn85600301 的回复:]
引用 15 楼 yinxiaoqi 的回复:

引用 14 楼 zn85600301 的回复:
引用 13 楼 zn85600301 的回复:

String tt = session.getAttribute("filespath");


Java code

String tt = session.getAttribute("filespath") == null ? "……
[/Quote]

什么上一次是空的啊,不是,我一起上传多个文件,每个文件都覆盖上一次的。
zn85600301 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yinxiaoqi 的回复:]

引用 14 楼 zn85600301 的回复:
引用 13 楼 zn85600301 的回复:

String tt = session.getAttribute("filespath");


Java code

String tt = session.getAttribute("filespath") == null ? "" : session.getAttribute(……
[/Quote]
你不就是为了记录上传的文件名么
头一次上传肯定是空的
这样改还不行吗?
yinxiaoqi 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 weizj593 的回复:]
session.setAttribute("filespath",str);//然后用session存起来
提到for循环外.
[/Quote]

呵呵,我以经这样做了,不可以的。
weizj593 2010-12-10
  • 打赏
  • 举报
回复
session.setAttribute("filespath",str);//然后用session存起来
提到for循环外.
yinxiaoqi 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zn85600301 的回复:]
引用 13 楼 zn85600301 的回复:

String tt = session.getAttribute("filespath");


Java code

String tt = session.getAttribute("filespath") == null ? "" : session.getAttribute("filespath").toString();
……
[/Quote]

用这个判断什么用呢,
zn85600301 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zn85600301 的回复:]

String tt = session.getAttribute("filespath");
[/Quote]

String tt = session.getAttribute("filespath") == null ? "" : session.getAttribute("filespath").toString();
zn85600301 2010-12-10
  • 打赏
  • 举报
回复
String tt = session.getAttribute("filespath");
zn85600301 2010-12-10
  • 打赏
  • 举报
回复
汗 每次上传的时候先从session里面把以前的取出来
然后和你当前上传的str 拼起来不就完了
yinxiaoqi 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yaoweijq 的回复:]
在循环外面定义一个String str
每次用str = str+星号+filename;
这样才能都保存了

引用 6 楼 yinxiaoqi 的回复:
引用 3 楼 zn85600301 的回复:
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里面当然只有最后一次的了


外面也是最……
[/Quote]

还是不行,


List<?> items = upload.parseRequest(request);
FileItem item = null;
String fileName = null;
String str ="";
String tt = "";
for (int i = 0 ;i < items.size(); i++){
item = (FileItem) items.get(i);
fileName = saveurl + File.separator + item.getName();
// 保存文件

if (!item.isFormField() && item.getName().length() > 0) {
item.write(new File(fileName));

//System.out.println("路径"+item.getName()+"★");
str=item.getName()+"★";


}

}
tt+=str;
session.setAttribute("filespath",tt);

这样吗。
yaoweijq 2010-12-10
  • 打赏
  • 举报
回复
看到了,迷糊中。。。
[Quote=引用 8 楼 colonel_zhou 的回复:]
引用 7 楼 yaoweijq 的回复:
在循环外面定义一个String str
每次用str = str+星号+filename;
这样才能都保存了

引用 6 楼 yinxiaoqi 的回复:
引用 3 楼 zn85600301 的回复:
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里……
[/Quote]
Colonel_Zhou 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yaoweijq 的回复:]
在循环外面定义一个String str
每次用str = str+星号+filename;
这样才能都保存了

引用 6 楼 yinxiaoqi 的回复:
引用 3 楼 zn85600301 的回复:
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里面当然只有最后一次的了


外面也是最……
[/Quote]

他的逻辑是对的的啊,他的str是在循环外面定义的,咋回事喃
yaoweijq 2010-12-10
  • 打赏
  • 举报
回复
在循环外面定义一个String str
每次用str = str+星号+filename;
这样才能都保存了
[Quote=引用 6 楼 yinxiaoqi 的回复:]
引用 3 楼 zn85600301 的回复:
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里面当然只有最后一次的了


外面也是最后一次的,

List<?> items = upload.parseRequest(request);
FileItem item = null;
……
[/Quote]
yinxiaoqi 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zn85600301 的回复:]
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里面当然只有最后一次的了
[/Quote]

外面也是最后一次的,

List<?> items = upload.parseRequest(request);
FileItem item = null;
String fileName = null;
String str ="";
for (int i = 0 ;i < items.size(); i++){
item = (FileItem) items.get(i);
fileName = saveurl + File.separator + item.getName();
// 保存文件

if (!item.isFormField() && item.getName().length() > 0) {
item.write(new File(fileName));

str+=item.getName()+"★";//这里是把文档的名称拼起来,
System.out.println(str);
}

}

session.setAttribute("filespath",str);//然后用session存起来


是这个意思吗,这个也是一样的,都是最后一个值,因为批量上传也是一条一条的,所以应该最后一次总会覆盖前一条的。
Colonel_Zhou 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yaoweijq 的回复:]
这个更合理些

引用 3 楼 zn85600301 的回复:
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里面当然只有最后一次的了
[/Quote]

眼拙了,居然没看到你把存字符串的的语句放在循环里面的。每循环一次 就存一次,当然被覆盖了。。。
yaoweijq 2010-12-10
  • 打赏
  • 举报
回复
这个更合理些
[Quote=引用 3 楼 zn85600301 的回复:]
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里面当然只有最后一次的了
[/Quote]
zn85600301 2010-12-10
  • 打赏
  • 举报
回复
我意思你把 session.setAttribute("filespath",str);//然后用session存起来
放循环外面
循环里面当然只有最后一次的了
Colonel_Zhou 2010-12-10
  • 打赏
  • 举报
回复
一楼的建议不错,
你先在循环里面把session的存的东西在后台打出来,看看到底 最后一次存的啥子,如果真像你自己说的 的覆盖了你就 按一楼的方法先判断一下再进行处理

加载更多回复(13)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧