0

I have a map userDetailsMap<String,List<String>> available in my jsp.
And eligibleUser,notEligibleUser,enrolledUser are the keys.
I can easily check for the key inside s:iterator tag.

Like(This code is working) :

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

But how I check that a particular key is present or not? I have used :

1.

<s:if test="%{#userDetailsMap['eligibleUser'] == null}">
//some code
</s:if>

2.

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

But both of them didn't work.
Please suggest me.

4

2 に答える 2

0

あなたの2番目のアプローチはうまく見えます。しかし、コードの一番上の部分から、あなたは実際にこれを望んでいるのだろうか?

 <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 がアクションによってゲッターを介して直接公開されている場合は、使用します

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

UserDetails は認証されたユーザーの「バッジ」を含む Bean であり、マップ内の 3 つのリストはユーザー ロールによってグループ化されたユース ケースであると想定しています。

この場合、ロールのキーを知らなくても、認​​証されたユーザーのユーザー ロールに基づいてすべてのユース ケースを出力するには、次を使用します。

    <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 に答える