我正在尝试将我的页面链接到存储在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业务仍然不熟悉),但有没有办法让我的链接工作?谢谢!
答案 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}">
试一下,看看它是否有效。可能是一些排列。