2010-08-30 79 views
1

我有一個HashMap包含HashMap的(hshFields)(ecd_date,owned_by,等等。)與鍵(標籤,大小,etc..that我訪問這樣:JSTL在請求屬性與嵌套的HashMap forToken

<c:out value="${hshFields.ecd_date.label}" /> 
<c:out value="${hshFields.owned_by.label}" /> 
<c:out value="${hshFields.fnd_source.label}" /> 

(注:我必須使用JSTL,而不是EL)

的約吐出領域的一個「標籤」(保存在一個XML地圖),即:

commitment_id = Commitment Id 
owned_by = Commitement Owner 
fndsource = Funding Source 

我想現在使用jstl forToken循環嵌套的HashMap。但是我無法讓它工作。這裏是我的嘗試之一:

<c:forTokens items="commitment_id, owned_by, fndsource" delims="," var="curField"> 
    The Field Label is: <c:out value="${hshFields.${curField}.label}" /> <br /> 
    The Field Sixze is: <c:out value="${hshFields.${curField}.size}" /> <br /> 
</c:forTokens> 

這是不工作,因爲不正確的語法或希望不是因爲我沒有能力EL?

編輯 確定基於skaffman以下的迴應我:

<c:forTokens items="owned_by, ecd_date, commitment_id" delims="," var="curField"> 
    Label for <c:out value="${curField}" /> : <c:out value="${hshFields[curField].label}" /><br></br> 
</c:forTokens> 

,輸出是:

Label for owned_by : Commitment Owner 
Label for ecd_date : 
Label for commitment_id : 

這似乎是第一個令牌唯一的工作,因爲如果我使用如下:

Label for owned_by : <c:out value="${hshFields.owned_by.label}" /> <br></br> 
Label for ecd_date : <c:out value="${hshFields.ecd_date.label}" /> <br></br> 
Label for commitment_id : <c:out value="${hshFields.commitment_id.label}" /> <br></br> 

我得到這樣的輸出:

Label for owned_by : Commitment Owner 
Label for ecd_date : Estimated Completion Date 
Label for commitment_id : Commitment Number 
+0

注意:您**正在使用*兼有* JSTL *和* EL。 JSTL是那些''標籤,EL是那些'$ {}'的東西。 – BalusC 2010-08-30 18:23:08

+0

@BalusC我的意思是我使用jsp 1.2所以這不起作用:但這是「/> – jeff 2010-08-30 18:34:12

+0

這就是所謂的」模板文本中的EL「。它確實在JSP 2.0之前不起作用。 – BalusC 2010-08-30 19:23:07

回答

3

你的語法是不完全正確,應該是

<c:out value="${hshFields[curField].label}" /> 

而不是

<c:out value="${hshFields.${curField}.label}" /> 

嵌套EL表達式一樣,是不允許的。

更新:原因這只是工作在循環的第一次迭代是因爲你的空間,以及逗號你items列表和delims只處理逗號。因此,改變環路

items="commitment_id,owned_by,fndsource" 

而不是

items="commitment_id, owned_by, fndsource" 

否則,空間將形成單個環路價值的一部分。

+0

謝謝。然而,我做了改變,現在我只能獲得我的第一個標記的標籤。後來的人吐出一片空白。我已經編輯過我的帖子。 – jeff 2010-08-30 18:58:22

+0

@jeff:查看編輯答案。 – skaffman 2010-08-30 19:05:57