我有這個讓我困惑不已的問題,我花了太多時間在我自己身上。我有一個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
我的變量消失了。
爲什麼你需要myResult之前的#號?嘗試刪除它! – 2014-09-03 00:04:48
@ rvraghav93'myResult'是一個本地的作用域變量,所以它需要它前面的'#',所以它知道在哪裏看。無論哪種方式,踢我刪除它,它不工作。 – 2014-09-03 00:14:20
什麼是'#currTime'?你如何給它賦值?同時顯示如何填充地圖'Map'。 –
2014-09-03 08:51:36