在JSP中包含Key

时间:2012-11-01 15:20:30

标签: jsp map struts2 jstl

我的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>

但他们两个都没有用 请建议我。

2 个答案:

答案 0 :(得分:0)

你的第二种方法看起来不错。但是从最顶层的代码中,我想知道你真的想要这个吗?

 <s:if test="%{context.userDetails.containsKey('eligibleUser')}">
//some code
</s:if>

请注意我已删除#符号,因为我不确定您是否需要该操作中的变量。如果我错了,请纠正我。

一些参考FYI。

http://commons.apache.org/ognl/language-guide.html

答案 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>