【问题标题】:ContainsKey in JSPJSP中的ContainsKey
【发布时间】:2012-11-01 15:20:30
【问题描述】:

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

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

【问题讨论】:

  • 您的密钥不正确:userDetailsMap 而不是 eligibleUser(或其他密钥)。不知道OGNL的syntak,但是看到这样的东西,立马觉得这个包含三个key的Map&lt;String, List&gt;应该换成一个包含三个list的bean。
  • 这里我们有一张地图而不是钥匙。
  • 您正在检查 #userDetailsMap.['userDetailsMap'] 是否为空。这没有道理。它应该是#userDetailsMap.['eligibleUser']。地图不包含自己作为键。
  • 对不起.. 已编辑。请对此进行调查。
  • 根据mycodefixes.blogspot.fr/2010/11/…%{#userDetailsMap['eligibleUser'] == null} 应该可以工作。删除左方括号前的点。

标签: jsp map struts2 jstl


【解决方案1】:

编辑:根据您的迭代器工作的声明,

这是有效的(测试):

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

【讨论】:

    【解决方案2】:

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

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

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

    一些参考仅供参考。

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

    【讨论】:

      猜你喜欢
      • 2016-08-25
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2010-10-17
      • 2012-04-19
      相关资源
      最近更新 更多