2013-08-05 23 views
1

在我的JSP頁面中,我使用c:forEach標記遍歷對象列表。此迭代中的每個對象都有一個名稱字段,我試圖使用該名稱字段來引用我已添加到我的Spring模型中的其他對象。但是,當我這樣做時,我得到一個異常,說第二個對象的屬性不能在字符串中找到。讓我用一個簡單的例子來說明。JSTL從另一個EL值中獲取EL的值

<c:forEach items="${companyList}" var="company" varStatus="num"> 
    <c:set var="monthStats" value="${company.name}_month" /> 
    <tr> 
     <td>Properties This Month</td> 
     <td>${monthStats.properties}</td> 
    </tr> 

    .... 

</c:forEach> 

所有對象都位於一個彈簧模型對象中,並已設置這樣 model.addAttribute(company.getName() +"_month", currentMonthStats);

我也曾嘗試扔出去的<c:set標籤,並試圖

${(company.name + "_month").properties}

以及

${${company.name + "_month"}.properties}

那些沒有工作。另外,我不太清楚如何說出我的頭銜,所以如果它可以更好地告訴我,讓其他人可以找到這個,如果他們有同樣的問題。

回答

1

你基本上要求進行雙重評估,而且不是那樣工作的。

我會修改傳送到視圖層的數據,使其不那麼奇怪,因此您可以以非病態方式訪問它,例如將月份統計信息放入由公司名稱訪問的地圖中或ID),或直接關聯他們在一個DTO等。

+0

是的,我想我會做這樣的事情。那麼雙查找有什麼問題?林混淆了爲什麼第二個loopkup不起作用,如果對象的模型關鍵字是一個字符串,這就是我正在使用它來查找它。那有意義嗎? – jlars62

+0

@ jlars62'value'已經被對象評估;我只是不認爲你可以在表達式中使用EL。雖然我可能會誤解;你可以檢查'monthStats'的類型來找出。儘管如此,我仍然會在視圖層之前考慮做更多的工作。更容易測試和維護,IMO。 –