我的jsp中有一个可用的地图userDetailsMap<String,List<String>>。
和eligibleUser,notEligibleUser,enrolledUser是关键。
我可以很容易地检查s:iterator标记中的键。
就像(这段代码正常工作):
<s:iterator var="userDetailsMap" value="context.userDetails">
<s:if test="%{#userDetailsMap.key=='eligibleUser'}">
//some code
</s:if>
<s:if test="%{#userDetailsMap.key=='notEligibleUser'}">
//some code
</s:if>
<s:if test="%{#userDetailsMap.key=='enrolledUser'}">
//some code
</s:if>
</s:iterator>但是我如何检查某个特定的密钥是否存在呢?我已经使用了:
1.
<s:if test="%{#userDetailsMap['eligibleUser'] == null}">
//some code
</s:if>2.
<s:if test="%{#userDetailsMap.containsKey('eligibleUser')}">
//some code
</s:if>但这两种方法都不起作用。
请推荐我。
发布于 2012-11-07 18:57:44
编辑:根据你的声明,你的迭代器工作,
这是工作的(测试的):
<s:if test="context.userDetails.containsKey('eligibleUser')">
//some code
</s:if>如果您的userDetail由操作直接通过getter公开,则使用
<s:if test="userDetails.containsKey('eligibleUser')">
//some code
</s:if>我假设UserDetails是包含经过身份验证的用户的“徽章”的bean,映射中的三个列表是按用户角色分组的用例。
在这种情况下,要打印基于经过身份验证的用户的用户角色的所有用例,甚至不知道角色的密钥,请使用:
<s:iterator value="userDetailsMap">
User Role: <s:property value="key" />
<br/>
<ul>
<s:iterator value="value">
<li>
Use Case: <s:property />
</li>
</s:iterator>
</ul>
</s:iterator>发布于 2012-11-02 15:23:43
您的第二种方法看起来很好。但是从最上面的代码来看,我想知道你真的想要这样吗?
<s:if test="%{context.userDetails.containsKey('eligibleUser')}">
//some code
</s:if>请注意,我删除了#符号,因为我不确定操作中的变量是否需要它。如果我错了,请纠正我。
一些参考资料。
http://commons.apache.org/ognl/language-guide.html
https://stackoverflow.com/questions/13180169
复制相似问题