2010-08-09 102 views
2

我想讓我的頁面鏈接到存儲在HashMap中的某個URL(關鍵字是某個名稱,值是我想要的URL鏈接到)。我不是在描述這個非常好,但這裏是我的代碼:在JSP頁面中從HashMap獲取URL值(使用Struts2)

JSP頁面:

<table> 
    <s:iterator value="dependenciesList" id="dependency"> 
    <tr><td> 
    <a href="<s:url value="productDocumentationMap.getKey(%{dependency})"/>"> 
    <s:property value="dependency"/> </a> 
    </td></tr> 
    </s:iterator> 
    </table> 

注:productDocumentationMap是<String, String>,一個HashMap和dependenciesList是ArrayList<String>。例如,如果dependenciesList包含三個元素[A,B,C],則第一個鏈接將鏈接到如下內容:http:///productDocumentationMap.getKey(A) 但我想要的鏈接是是

productDocumentationMap.getKey("A");

的實際價值,我知道我可能會做一些愚蠢的事(我還是新來這一切Struts2的業務),但有什麼辦法,我可以得到我的鏈接工作?謝謝!

回答

2

在OGNL中,您可以使用「mapName [indexName]」訪問地圖,其中indexName是您想要的鍵。

例如

<a href="<s:url value='productDocumentationMap[#dependency]'/>"> 

我認爲這是解決「依賴」作爲變量正確的語法,而不是作爲字符串「依賴」,但是這應該叫「getProductDocumentationMap()」,如果它返回一個Map對象,嘗試查找迭代器的。我假設你真的需要價值,而不是關鍵,因爲'依賴'本身就是關鍵。

此頁面提供了一些OGNL表達式,您可能會發現有用的OGNL表達式作爲參考。我發現有一半時間我只是擺弄了沒有括號,%{}和/或#直到它工作。 :-)

http://www.vaannila.com/struts-2/struts-2-example/struts-2-ognl-expression-language-example-1.html


對於您的後續問題:

我用這個測試空對簡單的屬性和包括部分。我想它可能可以應用於來自地圖的返回值。

<s:if test="%{licenseStatusString != null}"> 
... something that uses licenseStatusString 
</s:if> 
<s:else> 
... optional thing to include if the license status string is null. 
</s:else> 

也許

<s:if test="%{productDocumentationMap[#dependency] != null}"> 

試一下,看看它是否工作。這可能是一些排列。

+0

非常感謝sdeer,這對我有用!另一方面,如果productDocumentationMap.get(dependency)返回一個非空值,你會不會知道如何創建一個鏈接?有些產品沒有任何鏈接,所以我不想創建超鏈接到不存在的頁面。非常感謝! – 2010-08-09 18:41:23

+0

將評論移動到我原來的答案,以保存格式 – 2010-08-09 18:51:11

+0

我結束了使用類似: (顯然即使沒有值地圖,它不會返回null,但它確實返回一個空字符串) 非常感謝,你是一個救星! – 2010-08-09 18:57:20