BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #9384同步于 2010/1/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

怎样在页面上修改request中的parameter值?

uriel
2010/1/6镜像同步8 回复
如题,具体情况是:我要在处理完一个用户请求后,返回一个页面,在这页面上直接用jsp:forward将请求转发到另一个操作去(也就是省略掉返回给客户端,客户端重新发起请求的消耗),由于网站架构的原因,每个操作都只能使用request中的parameter的数据,而无法使用attribute的数据。而从一个操作到另一个操作只能通过返回页面,页面重新提起请求的方式。所以现在能想到的只有用这种forward的方法处理。 但是问题就来了:由于是在服务器端进行转发,request是旧的,但新的操作需要的数据稍有不一样,需要修改request中某些parameter的值。郁闷的是request不提供setParameter的方法....所以想请教一下是否有什么方法能修改parameter的值或者重新组织request?谢谢了~ 另:如果使用<jsp:forward page="/example.jsp?param=111"/>这类方法,因为原来请求的表单中既有param变量,会导致最后传进去的是一个数组
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
uriel机器人#1 · 2010/1/6
上网查了查,初步有个想法:在页面用response.sendRedirect("/icbcinbs.CServlet?opFlag=111");进行跳转不知道可不可以,家里没环境试,明天上班试试看 哪位牛人还有没有其他更好的做法的?
uriel机器人#2 · 2010/1/6
sendRedirect会与客户端产生两次交互,不满足条件啊。。。。郁闷
seaver机器人#3 · 2010/1/7
我要在处理完一个用户请求后,返回一个页面,在这页面上直接用jsp:forward将请求转发到另一个操作去(也就是省略掉返回给客户端,客户端重新发起请求的消耗) 没太看懂 是不是可以返回一个页面 页面有个form 表单里面是要提交的数据 在这个页面的onload里面直接将这个form提交 【 在 uriel 的大作中提到: 】 : 如题,具体情况是:我要在处理完一个用户请求后,返回一个页面,在这页面上直接用jsp:forward将请求转发到另一个操作去(也就是省略掉返回给客户端,客户端重新发起请求的消耗),由于网站架构的原因,每个操作都只能使用request中的parameter的数据,而无法使用attribute的数据。而从一个操作到另一个操作只能通过返回页面,页面重新提起请求的方式。所以现在能想到的只有用这种forward的方法处理。 : 但是问题就来了:由于是在服务器端进行转发,request是旧的,但新的操作需要的数据稍有不一样,需要修改request中某些parameter的值。郁闷的是request不提供setParameter的方法....所以想请教一下是否有什么方法能修改parameter的值或者重新组织request?谢谢了~ : 另:如果使用<jsp:forward page="/example.jsp?param=111"/>这类方法,因为原来请求的表单中既有param变量,会导致最后传进去的是一个数组
eaglebaby机器人#4 · 2010/1/7
没看懂,再调理一点吧
eaglebaby机器人#5 · 2010/1/7
你是让客户端一次接触,然后过程中触发你的另一个表单的提交?
uriel机器人#6 · 2010/1/7
嗯,你这也是一种方法,但onload提交是在客户端进行的操作,我想要的是在服务器编译这个页面时就直接跳转转发 【 在 seaver 的大作中提到: 】 : : 我要在处理完一个用户请求后,返回一个页面,在这页面上直接用jsp:forward将请求转发到另一个操作去(也就是省略掉返回给客户端,客户端重新发起请求的消耗) : 没太看懂 是不是可以返回一个页面 页面有个form 表单里面是要提交的数据 在这个页面的onload里面直接将这个form提交 : ...................
uriel机器人#7 · 2010/1/7
对,就是让客户端一次接触,过程中将表单的一些值修改后提交给另一个servlet 【 在 eaglebaby 的大作中提到: 】 : 你是让客户端一次接触,然后过程中触发你的另一个表单的提交?
uriel机器人#8 · 2010/1/7
问题已解决,其实挺简单的 使用Map map=request.getParameterMap();方法取得parameter的map进行操作 在WebSphere1.5以下版本时,getParameterMap()方法返回的其实是被重写的类似hashtable的Map,所以不能直接用put()之类的方法,必须强制转换为java.util.Map类型后进行操作 1.5版本以上,getParameterMap()方法返回的就是标准的Map类型,可以直接操作 如果使用tomcat的话,getParameterMap()方法返回的是org.apache.catalina.util.ParameterMap,这种类型本来是无法操作的,只能用反射将当前运行的ParameterMap解锁 Method method=requestParams.getClass().getMethod("setLocked",new Class[]{boolean.class}); method.invoke(requestParams,new Object[]{new Boolean(false)}); 然后就可以进行操作了