使用 <jsp:forward page="..."/> 进行页面重定向之后,request中的Attribute 的值会跟着转移,这给后台操作与显示分离带来好处。
但是转移之后的IE的地址栏上面的url并不会变成目标页面,还是转移之前的url,这个后面的操作带来很多不便。请问有什么方法,既能带着request中的Attribute 的值进行重定向,又能改变url么?
但是转移之后的IE的地址栏上面的url并不会变成目标页面,还是转移之前的url,这个后面的操作带来很多不便。请问有什么方法,既能带着request中的Attribute 的值进行重定向,又能改变url么?
?a=1&b=2
session.setAttribute("data",data);
response.sendRedirect("new_page.jsp");
参数就搞不定了巴。
感觉很麻烦而且不知道会否把session越充越大。
通过url传递问题是有长度限制
你说的map其实也是可以传递的不过又麻烦有难看,
不过一般需求放session里面没事,看会不会有很多。
看可以通过写一个通用的jsp页面做跳转。把要传的东西传到这个页面的form里面然后用js提交这个页面
csdn的发贴就是这样的,这样避免了刷新页面重复发贴的问题
1.怎么把要传的东西传到这个页面的form里面?每次要传的类型都可能不一样,比如一个map怎么传到form里。
2.form的action="" 是固定的巴,每次要转的页面不同。难道js可以改form的action?(也许可以巴不清楚)
谁还有别的办法么?
${dest}是要转到的目标页面。<form name="form1" action="${dest}" ....>
<input type=hidden name="key1" value="${value1}"/>
<input type=hidden name="key2" value="${value2}"/>
......
</form><script language=javascript>
form1.submit();
</script>可是这样每次的key 、value 都不一样,也就是无法用一个统一的jsp做这件事。
请问sunyujia你讲的是这个意思么?怎么用一个通用jsp做这个?谢谢!
发表于:2008-10-06 17:32:46
你解决了action的问题
可见你一直在努力的,如果在努力些就可以搞定了,所以我只给你个提示
以便你继续靠自己解决问题
经过多次这样的磨练以后就不会常在csdn提问了
因为靠别人是不可靠的,没有了依赖我猜你可以在
2008-10-06 12:32:46时发14楼的帖子提示1:request.getAttributeNames()
提示2:map的解决见提示1需要些编程上的小技巧,是可以解决的,你的路线也是对的。
1.由于form只能传字符串,对List 、Map 等类型会自动转成
[111, 222]
{key2=value2, key1=value1}
这样形式的字符串,传过去之后,我考虑单写个bean把它们还原回List 、Map。不过好麻烦啊,你们怎么做的?2.我还是觉得这种方法太麻烦了,如果还是用session 传变量,每次传完了都删除该变量,会不会对性能有大影响呢?
方法如下,
在后台处理中: session.setAttribute("key","value");
在显示页面中: <%=session.getAttribute("key");
session.removeAttribute("key");%>
这种方式是否可取呢?谢谢!如下是按你提示写的代码<form name="form1" method="post" action="${dest}">
<%Enumeration e = request.getAttributeNames();
for (;e.hasMoreElements();){
Object key = e.nextElement();
%>
<input type="hidden" name=<%=key.toString() %> value="<%=request.getAttribute((String)key)%>" />
<%}
%>
</form>
<script language="javascript" >
document.form1.submit();
</script>
BT解决方案:
将对象序列化成xml文件使用xstream非常简单http://xstream.codehaus.org/
然后将xml字符串提交后在服务端反序列化
不过这真是太糟糕的写法了,序列化和反序列化也是非常耗cpu的,问题由session的内存占用上转移到了cpu占用上面了。比较好的解决方案是使用cookie 让客户端分担服务器压力,让js对象序列化(json)可以选择cookie存储。2.基本没什么影响,建议使用session。具体问题要根据用户访问量,访问方式,服务器情况具体问题具体分析,我能想到的就是这些。
我平时使用session
但上面的说法都是具有可行性的
虽然问题绕了一大圈回到了session但是你的代码没有白写,很多情况下先跳转到一个通用的jsp然后再二次跳转这是个非常有用的手段,能避免重复提交。 最著名的例子我已经举了,csdn论坛。你的代码没什么问题,但是还可以优化,比如数组应该也能处理才好,这个很常用,例如 记录哪些checkbox被checked了,又不想放到session里面的时候可以用你写的jsp传递提交。
多个同名的input在后台取得的时候可以当成数组,利用xx instanceof Object[]可以判断一个对象是否是一个数组。写的有点乱,哪写错了你跳过去就好了。最后的建议:
非基础类型或复杂的数据使用session
简单的例如String,数组,int什么的使用你写的小jsp
话外题
善用cookie和javascript以及序列化与反序列化