2009-04-17 106 views
3

所以根據我的JSP參考書,以及所有其他的參考,我可以在網上找到,我應該能夠做到像:如何使動態屬性在JSP標記文件中工作?

<%@ tag dynamic-attributes="dynamicAttributesVar" %> 

,然後當一個人在用的屬性,我沒有在屬性指令定義,我應該能夠從「dynamicAttributesVar」地圖訪問屬性:

<%= dynamicAttributesVar.get("someUnexpectedAttribute") %> 

然而,這是不行的,在所有;當我嘗試時,我收到「dynamicAttributesVar無法解析」錯誤。現在

,我沒有發現(通過查看標籤生成的Java類),我可以「砍」的工作動態做屬性變量:

<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %> 

現在,黑客無法正常工作除非我也在我的標記指令中使用動態屬性參數,所以看起來該參數正在做

但是我想知道的是,我怎樣才能讓它爲所有其他JSP用戶做到這一點?

回答

4

「dynamicAttributesVar」不是動態屬性所在頁面上下文中的鍵的名稱嗎?所以,你可以做

<c:out value="${dynamicAttributesVar.someUnexpectedAttributes}"/> 

,或者如果你必須使用小腳本:

Map dynamicAttributes = (Map) pageContext.getAttribute("dynamicAttributesVar") 

(免責聲明:在直接的Java實現標籤我還沒有嘗試過,我只是用動態屬性..但它似乎是合理的)

+0

啊,才使得這麼多的意義!你的建議工作,稍作修改(我不得不使用jspContext.getAttribute而不是pageContext.get)。感謝一堆! – machineghost 2009-04-18 00:08:02

5

只是試圖獲得一個回答四年的問題的徽章。

我也遇到過這個問題,並且在O'Reilly處遇到一些幫助,使用JSTL代替scriptlet。

樓主也可以使用此代碼來獲取所有的鍵/值:

<c:forEach items="${dynamicAttributesVar}" var="a"> 
${a.key}="${a.value}" 
</c:forEach> 

這會得到一個特定的值:

<c:out value="${dynamicAttributesVar['someUnexpectedAttribute']}"/>