【发布时间】:2012-12-25 11:17:02
【问题描述】:
在PhaseListener 中调用initialize 方法。
public class myBean implements Serializable
{
private boolean myBoolean = "true";
public void initialize()
{
if(someCondition)
{
this.setMyBoolean(true);
}
else
{
this.setMyBoolean(false); // Lets assume myBoolean gets set to false here
}
}
}
此方法执行后,index.jsf 会呈现给用户。
在index.xhtml 页面中,有以下代码..
<h:commandLink action="#{myBean.secondMethod}" value="someLink">
</h:commandLink>
public String secondMethod()
{
log.debug("Value of myBoolean variable is: " +this.isMyBoolean());
return null;
}
当用户点击someLink 时,上面的代码会将myBoolean 打印为true 而不是false。
myBean 在request 范围内。由于这是一个新请求,我不得不相信 myBoolean 是新分配的 true 值。
我该如何克服这个问题?我的意思是,当调用secondMethod 时,如果myBoolean 是false,那么在secondMethod 中也应该是false。为什么myBoolean 总是保留true?
【问题讨论】:
-
也许 someCondition 对于回发是真的?
-
不,如果是
false,则始终是false,如果是true,则始终是true -
我认为您应该简单地进行一些调试。在初始化方法中设置断点并检查是否为回发调用它以及是否更改布尔值。如果没有其他地方可以更改布尔值,则必须由 initialize 方法调用。
-
我做了必要的调试。
initialize()方法没有被调用回发,也没有改变布尔变量的值。当我点击someLink时,它只调用secondMethod()这不是为布尔变量设置值的地方。 -
@chkal 我在下面提出了答案。也许你可以回答第没有。 2