无法使用EL访问JSP中的Modelmap

时间:2015-11-16 13:42:28

标签: jsp spring-mvc jstl el

我将LinkedHashMap <String, Object>从控制器传递给View(JSP)。

我无法遍历地图并在对象中显示值。

这里的Object是我的自定义POJO类,它包含appStatus,dbCon,mwCon,timeStamp等...

当地图为空时,不应创建任何行。创建的行数应等于映射中的条目。但是,虽然地图中有条目,但不会创建任何行。

控制器代码:

@Controller
public class HealthController {
    public static Map<String, Object> statusMap1 = new LinkedHashMap<String, Object>();
    @RequestMapping(value = { "/", "/home" })
    public ModelAndView statusDisplay() {
        . . . 
        . . .
        return new ModelAndView("monitor", statusMap1);
    }
}

monitor.jsp

<table class="table table-bordered table-hover">

        <tr>
            <th>Gateway</th>
            <th>Application Status</th>
            <th>MW Connection</th>
            <th>DB Connection</th>
            <th>Solace Connection</th>
            <th>Last Updated Time</th>
        </tr>

    // check if map is empty
    <c:if test="${!empty statusMap1}">
        <c:forEach var="statusObj" items="${statusMap1}">
            <tr>
                <td>${statusObj.appName}"</td>
                <td>${statusObj.appStatus }</td>
                <td>${statusObj.mwCon }</td>
                <td>${statusObj.dbCon }</td>
                <td>${statusObj.solCon }</td>
                <td>${statusObj.timeStamp }</td>
             </tr>
        </c:forEach> 
    </c:if> 

</table>

也试过

<td><c:out value="${statusMap1.statusObj.appName}"/></td>
<td><c:out value="${statusObj.appStatus }" /></td>

但是没有工作

1 个答案:

答案 0 :(得分:0)

ModelAndView构造函数传递POJO的视图名称地图

但你应该传递的是一个视图名称和一个模型(反过来又是一个地图)然后你应该把你的地图(或更好的一个列表) )你的POJO进入模型并在jsp中访问它。

代码:

@Controller
public class HealthController {
    @RequestMapping(value = { "/", "/home" })
    public ModelAndView statusDisplay() {
        . . . 
        . . .
        List<YourPojoType> pojos = new LinkedList<YourPojoType>();
        . . .
        //Add objects to the list here
        Map<String, Object> model = new LinkedHashMap<String, Object>();
        model.put("statusList1", pojos);
        return new ModelAndView("monitor", model);
    }
}

然后在jsp而不是:

<c:if test="${!empty statusMap1}">
<c:forEach var="statusObj" items="${statusMap1}">

你应该:

<c:if test="${!empty statusList1}">
<c:forEach var="statusObj" items="${statusList1}">

P上。 S上。

如果你想继续使用地图。请记住,当迭代地图时,每个循环statusObj的类型为Entry<String, Object>,因此要获得值,应使用${statusObj.value.mwCon}