在PhaseListener
上午调用initialize
方法。更改Request scoped bean中的初始值
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
,那么它也应该是false
,secondMethod
。为什么myBoolean
始终保持为true
?
也许someCondition是真的回发? – chkal
没有如果'FALSE'它总是会返回FALSE,如果它是TRUE;它永远是TRUE; –
我想你应该简单地做一些调试。在initialize方法中设置一个断点并检查它是否被调用回发,以及它是否更改布尔值。如果没有其他地方你改变布尔值,它必须被初始化方法调用。 – chkal