2012-11-01 53 views
0

我有一張地圖userDetailsMap<String,List<String>>可在我的jsp中使用。
eligibleUser,notEligibleUser,enrolledUser是關鍵。
我可以輕鬆地檢查s:iterator標籤中的密鑰。JSP中的ContainsKey

贊(此代碼工作):

<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 '應該被包含三個列表的bean替換。 –

+0

這裏我們有一張地圖而不是一把鑰匙。 –

+0

您正在檢查'#userDetailsMap。['userDetailsMap']'是否爲空。這個不成立。它應該是#userDetailsMap。['eligibleUser']。地圖不包含自己作爲關鍵。 –

回答

0

編輯:根據你的說法,你的迭代器的工作原理,

這是工作(測試):

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

如果您userDetail是通過一個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> 
0

你的第二種方法看起來不錯。但從代碼的頂部,我想知道你是否真的想要這樣嗎?

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

請注意,我已經刪除了#跡象,因爲我不知道你是否需要它從動作的變量。糾正我,如果我錯了。

部分參考僅供參考。

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

+0

讓我檢查.... –

+0

不工作.. :( –

+0

嘗試添加哈希回來? – Quincy