2014-11-22 69 views
1

我有问题显示我的键和值从我的HashMap其中值是用户定义的类这里是错误显示如何使用JSTL将ModelAndView中的Hashmap的键和值(在UserDefinedClass中)循环到JSP使用JSTL

enter image description here

Student.class

class Student 
{ 
    private String name; 
    private int age; 
    //getter and setter 
} 

我的控制器:

@RequestMapping(value = "/showStudent", method = RequestMethod.GET) 
public ModelAndView retrievesession(HttpSession session) 
{ 
    ModelAndView mav = new ModelAndView("ShowStudent"); 
    Map<String,ArrayList<Student>> classList = new HashMap<String,ArrayList<Student>>(); 
    ArrayList<Student> student = new ArrayList<Student>(); 

    String nameUser = (String) session.getAttribute("name"); 
    String trackUser = (String) session.getAttribute("track"); 

    if(nameUser.equals("Kakashi") && trackUser.equals("Konoha")) 
    { 
     student.add(new Student("Naruto",12)); 
     student.add(new Student("Sasuke",13)); 
     classList.put("Ninja", student); 

     mav.addObject("classList", classList); 
    } 

    else if(nameUser.equals("Goku") && trackUser.equals("Earth")) 
    { 
     student.add(new Student("Gohan",25)); 
     student.add(new Student("Goten",13)); 
     classList.put("Fighter", student); 

     mav.addObject("classList", classList); 
    } 

    else if(nameUser.equals("Ryuk") && trackUser.equals("Killer")) 
    { 
     student.add(new Student("Kira",22)); 
     student.add(new Student("L",21)); 
     classList.put("Reaper", student); 

     mav.addObject("classList", classList); 
    } 

    return mav; 
} 

我的JSP:

<h3>Name: ${name}</h3> 
<h3>Track: ${track}</h3><br/><br/><br/> 
<h3>Your student from ${classList.key}</h3> 
<c:if test="${not empty classList}"> 
    <table> 
    <c:forEach items="${classList}" var="classList"> 
     <tr> 
      <td>${classList.value.name}</td> 
      <td>${classList.value.age}</td> 
     </tr> 
    </c:forEach> 
    </table> 
</c:if> 

我不知道如果我做正确,它只是表明我有一个问题的值,也可以我添加一个else语句,所以如果会话是null它将返回到登录页面?

+0

我该怎么做? – user14 2014-11-22 09:50:45

+0

请参阅下面的答案。 – 2014-11-22 10:17:41

回答

1

遍历地图,你会得到一个更收集你需要在另一个循环迭代,然后才能获得对象的属性。

<table> 
<c:forEach items="${classList}" var="list"> 
    <tr><td><h3>Your student from ${list.key}</h3></td></tr> 
    <tr><td> 
    <table> 
    <c:forEach items="${list.value}" var="student"> 
     <tr> 
      <td>${student.name}</td> 
      <td>${student.age}</td> 
     </tr> 
    </c:forEach> 
    </table> 
    </td></tr> 
</c:forEach> 
</table> 
0

使用代码: -

<h3>Name: ${name}</h3> 
<h3>Track: ${track}</h3><br/><br/><br/> 
<h3>Your student from ${classList.key}</h3> 
<c:if test="${not empty classList}"> 
    <table> 
<c:forEach items="${classList}" var="class"> 
    <tr> 
     <td>${class.name}</td> 
     <td>${class.age}</td> 
    </tr> 
</c:forEach> 
</table> 

+0

尝试过,这是新的错误org.apache.jasper.JasperException:javax.el.E​​LException:无法解析表达式[$ {class.name}] – user14 2014-11-22 06:27:36