<%
    List<Message> list=biz.findAllMessage();      //这里的list有一个属性值:1,2,3,....(属性名为:sen)
    Map<Integer,UserInfo> m=biz.findAllUser();      //这里的Map值-键: 1-对象,2-对象,3-对象,....
    request.setAttribute("messages",list);
    request.setAttribute("userInfos",m);
%>
<c:forEach var="mes" items="${requestScope.messages}" varStatus="status">
    <c:set var="asd" value="${mes.sen}" scope="page"></c:set>       //这里的mes.sen已经确定值为:2
    ${requestScope.userInfos[asd]}                                  //这里读不了值    ${requestScope.userInfos[${mes.sen}]}                           //这个方法报错    ${requestScope.userInfos[mes.sen]}                              //这个方法也没有值
</c:forEach>
请问这样可以读出Map的值?是否一定要再嵌入一个循环?在这个问题里卡了很久!在此先谢谢大家~!

解决方案 »

  1.   

    我个人理解,JSTL的那个for each里的集合的元素类型应该不能对象把,貌似只能用String类型,实在不行,你就自己写for循环得了
      

  2.   

    那个forEach里面的集合已经有读到值
    ${mes.sen}确认可以读出1,2,3....其实这个在数据库中是两张外连接的表Message表的 sen列(值为1,2,...)连接 UserInfo的主键
      

  3.   

     ${requestScope.userInfos.get('Key值')}这样就可以得到个键对应的value
      

  4.   

    楼主你上面用jstl取得的asd是string类型的,用${requestScope.userInfos[asd]}取已知map中key时可以取得valu值的,只是你的map中key是integer类型,而asd是string类型的取不出来,还有一点jstl默认把数字封装成Long类型。即使你用${requestScope.userInfos[1]}也是取不到值的
    你可以参考一下http://blog.csdn.net/moreorless/article/details/6545457