2014-09-02 74 views
0

我有這個讓我困惑不已的問題,我花了太多時間在我自己身上。我有一個IF語句和一個動作類變量。在嘗試之前IF語句工作正常訪問的變量,但在嘗試後聲明,以訪問和變量是無處可尋Struts2變量在IF語句後消失

<s:iterator value="groupList" var="eventMap" status="itStatus">  
    <s:property value="%{groupName}" />       
    <s:if test="%{#eventMap.containsKey(#currTime)}"> 
     <s:property value="%{groupName}" /> 
    </s:if> 
</s:iterator> 

我的動作類定義

public List<AdvisorUser> getGroupName() { 
    return groupName; 
} 

public List<Map<Integer, Event>> getGroupList() { 
    return groupList; 
} 

邏輯上的代碼的偉大工程,它只有在它應該達到的情況下才會進入IF聲明。在我的Getter上爲groupName設置一個調試中斷點,表明我的getter在IF語句之前成功調用,在IF語句內,我根本沒有得到任何斷點。

​​的keyValue是一個整數,我可以確認#currTime是一個整數值。無論如何,對於測試,我在它的位置硬編碼了一個Integer值,並且出現了相同的失敗結果。

現在,隨着我所有的調試嘗試,我發現這個問題似乎圍繞着IF語句中的條件。如果我刪除的條件,並明確提出一個真正的語句,如

<s:if test="%{true}"> 
    <s:property value="%{groupName}" /> 
</s:if> 

代碼工作和groupName被稱爲像它應該,一切都很好!因此,使用這種邏輯我試圖做把條件的真/假結果到一個變量,並把該變量爲IF語句,像這樣

<s:set var="myResult" value="%{#eventMap.containsKey(#currTime)}"/> 
<s:if test="%{#myResult}"> 
    <s:property value="%{groupName}" /> 
</s:if> 

當然但是,這是行不通的。 myResult的值每次都是正確的,但一旦進入IF語句,groupName就不復存在了。

我在這裏沒有想法,花太多時間在這麼愚蠢的事情上。誰能幫幫我嗎?我很好奇,修復是多麼簡單...

更新:

一些更多的測試,我發現了另一個混亂元素添加到這個列表之後。如果我設置條件爲FALSE而不是TRUE輸入IF語句,那麼它工作。

因此,如果我輸入我的IF語句的條件爲#myResult == false我的變量存在,我可以訪問它,但是當我的條件是#myResult == true我的變量消失了。

+0

爲什麼你需要myResult之前的#號?嘗試刪除它! – 2014-09-03 00:04:48

+0

@ rvraghav93'myResult'是一個本地的作用域變量,所以它需要它前面的'#',所以它知道在哪裏看。無論哪種方式,踢我刪除它,它不工作。 – 2014-09-03 00:14:20

+1

什麼是'#currTime'?你如何給它賦值?同時顯示如何填充地圖'Map '。 – 2014-09-03 08:51:36

回答

0

我找到了解決該問題的解決方法。裏面的IF語句,如果我叫吸氣直接,然後它工作

<s:property value="%{groupName}" />       
<s:if test="%{#eventMap.containsKey(#currTime)}"> 
    <s:property value="%{getGroupName()}" /> 
</s:if> 

不知道爲什麼,我可以直接引用IF語句上面的屬性,但我不能裏面,但我沒有能力再花在這個時間,它現在的作品。雖然如果任何人都可以提供更好的解決方案或解釋,我很樂意聽到它以備將來參考。