在Request scoped bean中更改初始值

时间:2012-12-25 11:17:03

标签: jsf jsf-1.2

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被调用时,如果myBooleanfalse,则false中的secondMethod也应为myBoolean。为什么true始终保持{{1}}?

2 个答案:

答案 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.点的答案。