IF语句后Struts2变量消失

时间:2014-09-02 23:56:06

标签: java struts2

我有这个令我困惑的问题,我已经花了太多时间独自一人。我有一个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时,我的变量就消失了。

1 个答案:

答案 0 :(得分:0)

我找到了解决该问题的解决方案。在IF语句中,如果我直接调用getter,那么它可以正常工作

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

不知道为什么我可以在IF声明的正上方引用该物业,但我不能在里面,但我不能再花时间在这上面而且它现在有效。虽然如果有人能提供更好的解决方案或解释,我很乐意听到它以供将来参考。