我知道这可能是一个愚蠢的问题,我尝试谷歌搜索,但没有得到完美的答案。
我正在使用以下代码
<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?
谢谢, 阿尔马斯
答案 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>