在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