我的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>
但他们两个都没有用 请建议我。
答案 0 :(得分:0)
你的第二种方法看起来不错。但是从最顶层的代码中,我想知道你真的想要这个吗?
<s:if test="%{context.userDetails.containsKey('eligibleUser')}">
//some code
</s:if>
请注意我已删除#
符号,因为我不确定您是否需要该操作中的变量。如果我错了,请纠正我。
一些参考FYI。
答案 1 :(得分:0)
编辑:根据您的迭代器工作的陈述,
这是有效的(已测试):
<s:if test="context.userDetails.containsKey('eligibleUser')">
//some code
</s:if>
如果您的userDetail由Action直接通过getter公开,请使用
<s:if test="userDetails.containsKey('eligibleUser')">
//some code
</s:if>
我假设UserDetails是包含经过身份验证的用户“徽章”的bean,而地图中的三个List是按用户角色分组的用例。
在这种情况下,要根据经过身份验证的用户的用户角色打印所有用例,而不知道角色的密钥,请使用:
<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>