Объект, переданный через jsp: param throws javax.el.PropertyNotFoundException: свойство 'foo' не найдено для типа java.lang.String - PullRequest
3 голосов
/ 09 декабря 2010

Я знаю, что это может быть глупый вопрос, и я попробовал поискать в Google, но не получил идеального ответа.

Я использую следующий код

<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. У меня есть метод getClientId внутри компонента. Также, если я размещаю содержимое включенного файла JSP как есть (без директив и тега c: set), это работает абсолютно нормально. Есть ли способ, которым я могу передать объект, используя тег jsp: param, и в конце получения я получаю его как объект?

Возможно ли использовать jstl или мне придется использовать скриптлеты / выражения для того же?

Спасибо, Алмас

1 Ответ

6 голосов
/ 09 декабря 2010

Параметры 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>  
...