0

マネージド Bean にメンバー変数があり、このメンバー変数はゲッターとセッターを使用して XHTML のコンポーネントに関連付けられています。関数呼び出しでメンバー変数を設定すると、このメンバー変数のゲッターがトリガーされたときに、このメンバー変数はまだ古い値を保持します。コンポーネントが最新の更新された値を取得できるように、このメンバー変数を更新する方法を教えてください。

管理 Bean:

@ManagedBean(name = "myBean")
@SessionScoped    
public class MyBean {
  public boolean show = false;

  /** getter and setter **/

  public void theFunc() {
     this.show = true;
  }
}

XHTML コード

<h:panelGroup id="Panel_1" rendered="#{myBean.show == true}">
   ...
   Some rubbish here
   ...
</h:panelGroup>

<h:panelGroup id="Panel_2">
   <h:commandLink action="#{myBean.doFunc}">
      <f:ajax event="action" render="Panel_1"/>
      <h:outputText value="XX" />
   </h:commandLink>
</h:panelGroup>

このサンプルから、show変数はtheFunc()既に true に設定されているにもかかわらず、false を示しています。

2012 年 10 月 6 日の更新 commandButton を削除し、commandLink に置き換えました。使用に関しては問題ないと思います。

4

2 に答える 2

1

この方法を試してください:

<h:panelGroup id="toUpdate">

    <h:panelGroup id="Panel_1" rendered="#{myBean.show}">
        ...
    </h:panelGroup>

</h:panelGroup>

<h:commandButton action="#{theBean.doCalculation}">
    <f:ajax render="toUpdate" />
</h:commandButton>

注意すべき点が 2 つあります。

  1. 常にレンダリングされる<h:panelGroup id="Panel_1">別の要素または何かの要素内にラップする必要があります。<h:panelGroup>それ以外の場合、show変数がinitial の場合、 を使用するfalseと JSF レンダラーがコンポーネントを見つけられないため、ajax の更新が機能しない可能性があります。id="Panel_1"<f:ajax render="Panel_1" />
  2. rendered="#{myBean.show}"十分です:P。はブール変数なのでshow、必要ありませんrendered="#{myBean.show == true}"
于 2012-10-05T07:04:21.740 に答える
1

メソッドを呼び出したい場合は、メソッドの戻り値の型名前を変更します。

これを変える

  public void theFunc() {
     this.show = true;
  }

これに

  public String doFunc() {
     this.show = true;
     return null;
  }

そうしないと、このアクションは機能しません。

   <h:commandLink action="#{myBean.doFunc}">

次に、このようにパネルの親を更新します

<h:panelGroup id="parentPanelGroupId">

    <h:panelGroup id="Panel_1" rendered="#{myBean.show}">
        ...
        Some rubbish here
        ...
    </h:panelGroup>

</h:panelGroup>

<h:panelGroup id="Panel_2">
   <h:commandLink action="#{myBean.doFunc}">
      <f:ajax render="parentPanelGroupId"/>
      <h:outputText value="SHOW/HIDE PANEL 1" />
   </h:commandLink>
</h:panelGroup>

ノート:

使用する

render="#{myBean.show}"

それ以外の

render="#{myBean.show == true}"

于 2012-10-04T20:15:11.383 に答える