0

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

但他们两个都没有工作。
请给我建议。

4

2 回答 2

0

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

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

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

一些参考仅供参考。

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

于 2012-11-02T07:23:43.173 回答
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>
于 2012-11-07T10:57:44.370 回答