我有这个令我困惑的问题,我已经花了太多时间独自一人。我有一个IF语句和一个动作类变量。尝试在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语句中我根本没有得到断点。
eventMap
的keyValue是一个整数,我可以确认#currTime
是一个整数值。尽管如此,为了测试我在其位置硬编码了一个Integer值并且结果相同。
现在我的所有调试尝试都发现问题似乎围绕着IF语句中的条件。如果我删除条件并明确地放置一个真实的语句,如
<s:if test="%{true}">
<s:property value="%{groupName}" />
</s:if>
代码有效,groupName
就像它应该的那样被调用,一切都很棒!!所以使用这个逻辑我尝试将条件的true / false结果放入变量并将该变量放入IF语句中,如此
<s:set var="myResult" value="%{#eventMap.containsKey(#currTime)}"/>
<s:if test="%{#myResult}">
<s:property value="%{groupName}" />
</s:if>
但当然,这不起作用。每次myResult
的值都是正确的,但是一旦它进入IF语句groupName
就不再存在了。
我在这里缺乏想法,并花了太多时间在这么愚蠢的事情上。谁能帮帮我吗?我很好奇修复的简单程度......
更新
经过一些测试后,我发现另一个混淆元素要添加到此列表中。如果我将条件设置为输入IF语句为FALSE而不是TRUE,那么它可以工作。
因此,如果我输入条件为#myResult == false
的IF语句,我的变量存在并且我可以访问它,但是当我的条件为#myResult == true
时,我的变量就消失了。
答案 0 :(得分:0)
我找到了解决该问题的解决方案。在IF语句中,如果我直接调用getter,那么它可以正常工作
<s:property value="%{groupName}" />
<s:if test="%{#eventMap.containsKey(#currTime)}">
<s:property value="%{getGroupName()}" />
</s:if>
不知道为什么我可以在IF声明的正上方引用该物业,但我不能在里面,但我不能再花时间在这上面而且它现在有效。虽然如果有人能提供更好的解决方案或解释,我很乐意听到它以供将来参考。