0

メソッド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.jsfUser にレンダリングされます。

ページには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されます。truefalse

myBeanrequest範囲内です。それは新しい要求であるため、myBoolean新たに割り当てられたtrue値であると信じざるを得ません。

どうすればこれを克服できますか?secondMethodつまり、 が呼び出されたときに、myBooleanだった場合false、それも含まれている必要がfalseありsecondMethodます。そして、なぜそれはmyBoolean常に残っているのtrueですか?

4

2 に答える 2

0

問題を解決しました。私の質問には2つの部分があります。

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.しかし、私の質問のポイントに対する回答はまだ得られていません。

于 2012-12-26T13:41:04.737 に答える
0

初期化メソッドが呼び出されていますか? @PostConstructアノテーションを初期化メソッドに付けて、Bean が生成された後に呼び出されるようにするのはどうですか?

于 2012-12-26T10:33:06.710 に答える