通过jsp:param传递的对象抛出javax.el.PropertyNotFoundException:在类型java.lang.String上找不到属性'foo'

时间:2010-12-09 09:59:59

标签: jsp parameter-passing jspinclude propertynotfoundexception

我知道这可能是一个愚蠢的问题,我尝试谷歌搜索,但没有得到完美的答案。

我正在使用以下代码

<c:forEach var="aggregatedBatchProgressMetrics" items="${batchProgressMetricsList}">  
    <jsp:include page="html/tableContentsDisplayer.jsp">  
        <jsp:param name="batchProgressMetrics" value="${aggregatedBatchProgressMetrics}" />
    </jsp:include>
</c:forEach>  

并在html / tableContentsDisplayer.jsp中,我有以下

<c:set var="aggregatedBatchProgressMetrics">${param.batchProgressMetrics}</c:set>    
    <tr>  
        <td class="tdcenter">${aggregatedBatchProgressMetrics["clientId"]}</td>    
        <td class="tdcenter">${aggregatedBatchProgressMetrics["instrumentStats"]["totalImntsCompleted"]}</td>  
        <td class="tdcenter">${aggregatedBatchProgressMetrics["instrumentStats"]["totalImntsRemaining"]}</td>
    </tr>  

aggregatedBatchProgressMetrics是我从c得到的:forEach是com.xyz.AggregatedBatchProgressMetrics类型的对象而不是String,从它将其视为String对象的例外。我在bean里面有getClientId方法。此外,如果我按原样放置包含的jsp文件的内容(没有指令和c:set标签),它的工作绝对正常。有没有办法我可以使用jsp:param标签传递一个对象,并在接收端我得到它作为一个对象?

是否可以使用jstl或i必须使用scriptlets / expression?

谢谢, 阿尔马斯

1 个答案:

答案 0 :(得分:6)

HTTP请求参数被视为字符串。对于jsp:param,它基本上已由String#valueOf()转换为字符串。而是在<c:set>的帮助下将其作为对象存储在请求范围内。

<c:forEach var="aggregatedBatchProgressMetrics" items="${batchProgressMetricsList}">  
    <c:set var="batchProgressMetrics" value="${aggregatedBatchProgressMetrics}" scope="request" />
    <jsp:include page="html/tableContentsDisplayer.jsp" />  
</c:forEach>

<tr>  
    <td class="tdcenter">${batchProgressMetrics["clientId"]}</td>    
    <td class="tdcenter">${batchProgressMetrics["instrumentStats"]["totalImntsCompleted"]}</td>  
    <td class="tdcenter">${batchProgressMetrics["instrumentStats"]["totalImntsRemaining"]}</td>
</tr>