在PhaseListener
am中调用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
将呈现给User。
在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
?
您确定正在调用您的initialize方法吗?在初始化方法中放入@PostConstruct注释,以确保在生成bean后调用它,怎么样?
我解决了我的问题。我的问题分为两部分。
1.
我该如何克服这一点?
2.
为什么myBoolean
总是正确的?
以下答案适用于点1.
<h:commandLink action="#{myBean.secondMethod}" value="someLink">
<f:param name="newValue" value="#{myBean.myBoolean}"></f:param> // Use f:param to send the actual value
</h:commandLink>
public String secondMethod()
{
String newValueIs = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("newValue");
log.debug("Value of myBoolean variable is: " +newValueIs); //Prints false if it was false and true if it was true
return null;
}
然而,我的问题中的2.
点仍然没有得到答案。