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
,则false
中的secondMethod
也应为myBoolean
。为什么true
始终保持{{1}}?
答案 0 :(得分:0)
您确定要调用初始化方法吗?如何将 @PostConstruct 注释放到初始化方法中以确保在生成bean之后调用它?
答案 1 :(得分:0)
我解决了我的问题。我的问题分为两部分。
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.
点的答案。