2012-11-01 2 views
0

У меня есть карта userDetailsMap<String,List<String>>, доступная в моем jsp.
И eligibleUser,notEligibleUser,enrolledUser являются ключами.
Я могу легко проверить ключ внутри s:iterator тег.ContainsKey in JSP

Как (Этот код работает):

<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

Ваших ключи неверны: 'userDetailsMap' вместо «eligibleUser» (или другой ключ). Я не знаю синтаксиса OGNL, но когда я вижу что-то вроде этого, я сразу же думаю, что этот «Map », содержащий три ключа, должен быть заменен компонентом, содержащим три списка. –

+0

Здесь у нас есть карта, а не ключ. –

+0

Вы проверяете, является ли '#userDetailsMap. ['UserDetailsMap']' равно null. Это не имеет никакого смысла. Это должно быть #userDetailsMap. ['EligibleUser']. Карта не содержит себя как ключ. –

ответ

0

EDIT: на основе вашего заявления, который работает ваш итератор,

это работает (проверено):

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

Если userDetail экспонируется через геттер непосредственно действий , затем используйте

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

Я принимаю что UserDetails является компонентом, содержащим «значок» аутентифицированного пользователя, а три списка внутри карты - это случаи использования, сгруппированные по их роли пользователя.

В этом случае, чтобы напечатать все прецеденты на основе роли пользователя аутентичного пользователя, не зная даже ключи от ролей, используйте:

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

Ваш второй подход выглядит хорошо. Но из верхней части кода мне было бы интересно, действительно ли вы этого хотите?

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

Пожалуйста, обратите внимание, что я удалил # знак, я не уверен, если это необходимо для переменной от действия. Поправьте меня, если я ошибаюсь.

некоторые реквизиты FYI.

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

+0

позвольте мне проверить .... –

+0

не работает .. :( –

+0

пытался добавить хэш назад? – Quincy