使用el表达式获取request中map值的问题
请教大家一个js取值的问题:在action中有一个map集合:Map<String,String>pColMap=newHashMap<String,String>();...
请教大家一个js取值的问题:
在action中有一个map集合:
Map<String,String> pColMap = new HashMap<String,String>();
在map中存入值后再放到request中:
httpServletRequest.setAttribute("endtimeMap",pColMap);
在js中这样获取:
alert("${endtimeMap['"+ff+"']}"); //ff是一个参数值,ff的值是8时,map应该有值
得不到值,本来当ff为8的时候应该是有值的。
直接使用字符串8能够获取到
如:alert("${endtimeMap['8']}")这样是有值的,
但是我需要用参数的方式获取值,即:alert("${endtimeMap['"+ff+"']}"); 这种方式,求赐教! 展开
在action中有一个map集合:
Map<String,String> pColMap = new HashMap<String,String>();
在map中存入值后再放到request中:
httpServletRequest.setAttribute("endtimeMap",pColMap);
在js中这样获取:
alert("${endtimeMap['"+ff+"']}"); //ff是一个参数值,ff的值是8时,map应该有值
得不到值,本来当ff为8的时候应该是有值的。
直接使用字符串8能够获取到
如:alert("${endtimeMap['8']}")这样是有值的,
但是我需要用参数的方式获取值,即:alert("${endtimeMap['"+ff+"']}"); 这种方式,求赐教! 展开
6个回答
展开全部
你要明白el表达式是在什么时候执行的
el表达式实际上是java代码, 即jsp里的java代码, 是servlet执行的
也就是说, 后台看到el表达式的时候就执行了, 然后用执行的结果代替这个el表达式, 然后再返回给前台
你写alert("${endtimeMap['8']}");
后台看到的是就是${endtimeMap['8']}这个东西, 然后计算从map里得到对应的值, 代替则个东西, 所以你到前台看到的实际上是map里的值了
如果你写alert("${endtimeMap['"+ff+"']}");, 后台看到的是${endtimeMap['"+ff+"']}, 你觉得后台能把这个解析成什么, 后台会认为你是取map里key值为"\"+ff+\""的value(你要是不信, 你给你的map里添一组这个key-value)
归根结底还是执行顺序的问题, el表达式是servlet是后台执行的, js是得到response后在前台执行的, el优先于js, 你的想法是js先把值穿进去, 然后el表达式再得值, 所以必须不正确了
这样说你应该明白了吧...
el表达式实际上是java代码, 即jsp里的java代码, 是servlet执行的
也就是说, 后台看到el表达式的时候就执行了, 然后用执行的结果代替这个el表达式, 然后再返回给前台
你写alert("${endtimeMap['8']}");
后台看到的是就是${endtimeMap['8']}这个东西, 然后计算从map里得到对应的值, 代替则个东西, 所以你到前台看到的实际上是map里的值了
如果你写alert("${endtimeMap['"+ff+"']}");, 后台看到的是${endtimeMap['"+ff+"']}, 你觉得后台能把这个解析成什么, 后台会认为你是取map里key值为"\"+ff+\""的value(你要是不信, 你给你的map里添一组这个key-value)
归根结底还是执行顺序的问题, el表达式是servlet是后台执行的, js是得到response后在前台执行的, el优先于js, 你的想法是js先把值穿进去, 然后el表达式再得值, 所以必须不正确了
这样说你应该明白了吧...
追问
你太棒了!瞬间让我醍醐灌顶啊! 以解决问题为原则,zgh26782000这位师傅虽然煞费苦心,但是我仍然没能明白,所以分数就给了你了,但是我以同样的心态非常非常感激 zgh26782000。
展开全部
el表达式实际上是java代码, 即jsp里的java代码, 是servlet执行的
也就是说, 后台看到el表达式的时候就执行了, 然后用执行的结果代替这个el表达式, 然后再返回给前台
你写alert("${endtimeMap['8']}");
后台看到的是就是${endtimeMap['8']}这个东西, 然后计算从map里得到对应的值, 代替则个东西, 所以你到前台看到的实际上是map里的值了
如果你写alert("${endtimeMap['"+ff+"']}");, 后台看到的是${endtimeMap['"+ff+"']}, 你觉得后台能把这个解析成什么, 后台会认为你是取map里key值为"\"+ff+\""的value(你要是不信, 你给你的map里添一组这个key-value)
归根结底还是执行顺序的问题, el表达式是servlet是后台执行的, js是得到response后在前台执行的, el优先于js, 你的想法是js先把值穿进去, 然后el表达式再得值, 所以必须不正确了
这样说你应该明白了吧...
也就是说, 后台看到el表达式的时候就执行了, 然后用执行的结果代替这个el表达式, 然后再返回给前台
你写alert("${endtimeMap['8']}");
后台看到的是就是${endtimeMap['8']}这个东西, 然后计算从map里得到对应的值, 代替则个东西, 所以你到前台看到的实际上是map里的值了
如果你写alert("${endtimeMap['"+ff+"']}");, 后台看到的是${endtimeMap['"+ff+"']}, 你觉得后台能把这个解析成什么, 后台会认为你是取map里key值为"\"+ff+\""的value(你要是不信, 你给你的map里添一组这个key-value)
归根结底还是执行顺序的问题, el表达式是servlet是后台执行的, js是得到response后在前台执行的, el优先于js, 你的想法是js先把值穿进去, 然后el表达式再得值, 所以必须不正确了
这样说你应该明白了吧...
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要用js随时取值,首先你的map数据要转成json,然后输出到页面上赋值个一个js的变量,使用时去这个json对象中取值
其次 你需要明白一点,当页面显示到浏览器上的时候,后端的代码已经执行完了,是永远无法从这次请求中拿到服务器端的内容了,除非你把服务器输出的内容都输出到浏览器上
其次 你需要明白一点,当页面显示到浏览器上的时候,后端的代码已经执行完了,是永远无法从这次请求中拿到服务器端的内容了,除非你把服务器输出的内容都输出到浏览器上
更多追问追答
追问
那么,我可以将从后台传过来的一个map集合直接转化成一个json类型?
比如将:var ppp = "${endtimeMap}" //endtimeMap是从action中传过来的一个HashMap对象
转化成 var json = ("("+ppp+“)")
然后对json来进行取值操作?
追答
var ppp = "${endtimeMap}"
话说你那样写不是json对象吧,你需要转换过去
然后 你也不用 var json = ("("+ppp+“)") 这样写,只接 var json = 转后的json字符串,就行了
取值基本上和map取值一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你该回想一下服务器和客户端的交互流程,首先客户端发送请求》》服务器端回应》》将生成的html代码返回给客户端,这一步生成代码时${endtimeMap['"+ff+"']}的参数ff怎么从js中获得?只能在请求时就发过去呗。
追问
但是我在${endtimeMap['"+ff+"']}之前单独alert(ff)是有值的,等于8,这样不就说明ff是有值的吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-22
展开全部
那个ff是什么时候赋值的。 必需是jsp/action初始化时,就有值,否则不会得到
追问
ff是js function在页面得到的一个参数值,调用之前输出了,是有值的。这样的话,应该是可以取出值的吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询