JSTL 和 el 的数据 好像是 泛类型的吧 不需要转

解决方案 »

  1.   

    说一下你的代码的问题。
    <c:forEach items="${map}" var="item" varStatus="s">
      ${item[s.index]}
    </c:forEach>
    [code]
    首先,map是不可能像你这样循环的,应该用${item.key}和${item.value}来取值。
    第二,即使是可以循环也应该写成${map[s.index]},而不是${item[s.index]}
    第三,s.index可以直接作为整数使用。请看下面的例子:
    [code=HTML]
    <%@page contentType="text/html; charset=GBK"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@page import="java.util.HashMap"%>
    <%@page import="java.util.Map"%>
    <%@page import="java.util.List"%>
    <%@page import="java.util.ArrayList"%>
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    <%
    Map m = new HashMap();
    m.put("1","a");
    m.put("2","b");
    m.put("3","c");
    m.put("4","d");
    request.setAttribute("map",m);List l = new ArrayList();
    l.add("1");
    l.add("2");
    l.add("3");
    request.setAttribute("l",l);
    %>
    <c:forEach items="${l}" var="item" varStatus="s"> 
        ${l[s.index]}
    </c:forEach>
    </body>
    </html>
      

  2.   

    ${item[s.index]}可以直接在jsp中打印如果你想利用他运算的话可以直接做运算,不做运算可以直接打印,你所说的转型没有意义
      

  3.   

    首先谢谢各位热情相助。
    回楼上诸位,因为我打印${item[s.index]}一直为空,但是打印${item['0']}就不为空了,map中有如下的数据[key,value]:["1",value1],["2",value2]等等。我需要根据forEach的行号取到map中的值,应该如何写?
      

  4.   

    map本身就不是按照放入顺序来读取内容的数据结构。
    你可以把map声明为LinkedHashMap,这种map在遍历的时候会维持放入元素的顺序。<%@page contentType="text/html; charset=GBK"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@page import="java.util.HashMap"%>
    <%@page import="java.util.Map"%>
    <%@page import="java.util.List"%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="com.sun.tools.jdi.LinkedHashMap"%>
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    <%
    Map m = new LinkedHashMap();
    m.put("1","a");
    m.put("2","b");
    m.put("3","c");
    m.put("4","d");
    request.setAttribute("map",m);
    %>
    <c:forEach items="${map}" var="item" varStatus="s"> 
        ${item.key }:${item.value }<br/>
    </c:forEach>
    </body>
    </html>
      

  5.   

    楼上正解,用item.key, item.value
    另外s.index不是int类型,应该是Integer
    varStatus的所有属性都是对象
      

  6.   

    <%@page import="com.sun.tools.jdi.LinkedHashMap"%>
    应该改为java.util.LinkedHashMap,写得太匆忙了。
      

  7.   

    回楼上,首先谢谢你的回答。但是你大概还是没有理解的我意思,我需要根据forEach的行号取到map中的值,我需要判断当前的行号s.index在map中是否有对应的key,然后输出map的value,应该怎么写?
      

  8.   


    不可以打印啊,我试过了的。只有${item['0']}这种才可以打印。
      

  9.   


    ${item[String.Valueof(s.index)]}不可以这样写的吧?
      

  10.   

    不要问这些“高手”了,水平太高,喜欢问非所答
    答案肯定的,没有,fmt也只是用来做输出的,你的需求是作为一个变量,我也遇到这个,我现在的解决办法是在后台直接把类型强制转换过来