从JSP页面中的HashMap获取URL值(使用Struts2)

时间:2010-08-09 18:15:04

标签: java jsp struts2 hashmap

我正在尝试将我的页面链接到存储在HashMap中的某个URL(键是一些名称,值是我要链接到的URL)。我不是很擅长描述这个,但这是我的代码:

对于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业务仍然不熟悉),但有没有办法让我的链接工作?谢谢!

1 个答案:

答案 0 :(得分:2)

在OGNL中,您可以使用“mapName [indexName]”访问地图,其中indexName是您想要的密钥。

e.g。

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

我认为这是将'依赖'解析为变量的正确语法,而不是字符串'依赖',但这应该调用'getProductDocumentationMap()',如果它返回一个Map对象,则尝试查找迭代器的。我假设你真的想要价值而不是关键,因为'依赖'本身就是关键。

此页面提供了一些示例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}">

试一下,看看它是否有效。可能是一些排列。