正在更改请求作用域bean中的初始值



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

myBeanrequest范围内。由于这是一个新的请求,我不得不相信myBoolean是新分配的true值。

我该如何克服这一点?我的意思是,当调用secondMethod时,如果myBooleanfalse,那么它也应该是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.点仍然没有得到答案。

相关内容

  • 没有找到相关文章

最新更新