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

Alm*_*mas 3 jsp jspinclude parameter-passing propertynotfoundexception

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

我正在使用以下代码

<c:forEach var="aggregatedBatchProgressMetrics" items="${batchProgressMetricsList}">  
    <jsp:include page="html/tableContentsDisplayer.jsp">  
        <jsp:param name="batchProgressMetrics" value="${aggregatedBatchProgressMetrics}" />
    </jsp:include>
</c:forEach>  
Run Code Online (Sandbox Code Playgroud)

在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>  
Run Code Online (Sandbox Code Playgroud)

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

是否有可能使用jstl或我必须使用scriptlets /表达式相同?

谢谢,阿尔玛斯

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)
<tr>  
    <td class="tdcenter">${batchProgressMetrics["clientId"]}</td>    
    <td class="tdcenter">${batchProgressMetrics["instrumentStats"]["totalImntsCompleted"]}</td>  
    <td class="tdcenter">${batchProgressMetrics["instrumentStats"]["totalImntsRemaining"]}</td>
</tr>  
Run Code Online (Sandbox Code Playgroud)