2010-01-23 35 views
1

假設存在名爲resultSet的查詢結果,該結果的可用字段爲templateId在單獨的JSTL循環中訪問映射值

此外,地圖'templateMap'的鍵值爲templatedId

我無法從下面得到任何結果,任何幫助讚賞。

<c:foreach var="row" items="${resultSet.rows}"> 
    <c:out value="${templateMap[row.templateId]}" /> 
</c:foreach> 

注意:這是一個編碼恐怖應用,其特徵在於,上述結果集是<sql:query>的結果。

以下也不起作用。

<c:foreach var="row" items="${resultSet.rows}"> 
    <c:set var="tmplId" value="${row.templateId}" /> 
    <c:out value="${templateMap[tmplId]}" /> 
</c:foreach> 
+1

這個故事中的「地圖」究竟在哪裏? '$ {template}'在這裏只是'$ {resultSet}'的一行。你是不是覆蓋了一個已經存在的具有相同名稱的Map?還是你把'$ {resultSet}'混淆爲'Map'? – BalusC

+0

感謝您的編輯。我取消了我的回答:) – BalusC

回答

2

您發佈(和編輯)的代碼在語法上是有效的,所以問題在於別的地方。

首先,Id後綴讓我覺得它實際上是一個Number。事實上,EL中的非十進制數字默認爲long。因此,如果它是一個Map<Integer, Integer>,那麼這個代碼將不起作用。您需要有Map<Long, Long>Map<Long, Integer>才能使其運行。

我不知道我應該如何解釋你的措辭「編碼恐怖應用程序」,但我敢打賭,你已經知道使用JSTL SQL taglib用於其他目的而不是快速原型設計被認爲是一種非常糟糕的做法;)該邏輯屬於數據訪問層中真正的Java類。

+0

謝謝你,這讓我走上了正軌。 Map實際上是,而templateId是BigDecimal。 關於編碼恐怖。在我的職業生涯中,我一直致力於各種複雜的應用。這個人拿蛋糕......每個人都必須偶爾做一些骯髒的東西...... :) – AM01