0

私はJSF2.0、トマホーク、およびf:ajax私の開発でいくつかのものを使用しています。JSFアプリケーションに魔法の言葉をかけようとしています。単語をクリックすると他の単語に変わり、もう一度クリックすると再び元に戻ります。より明確にするために、ここにシナリオがあります。XXを示す元の単語。XXをクリックすると、XXがYYに変わります。YYをクリックすると、XXに戻ります。魔法を感じますか?:P

これが私の作り方です。2を作成しますh:panelGroup。次のように、1つにはXXワードが含まれ、もう1つにはYYワードが含まれます。

<h:panelGroup id="Panel_X">
   <h:outputText value="XX" />
</h:panelGroup>

<h:panelGroup id="Panel_Y">
   <h:outputText value="YY" />
</h:panelGroup>

クリック可能にするために、commandLinkを使用します。上記のコードから変更して、次のようにします。

<h:panelGroup id="Panel_X" rendered="#{magicBean.show_X == true}">
   <h:commandLink action="#{myBean.doFunc}">
      <f:ajax event="action" render="Panel_Y"/>
      <h:outputText value="XX" />
   </h:commandLink>
</h:panelGroup>

<h:panelGroup id="Panel_Y" rendered="#{magicBean.show_X == false}">
   <h:commandLink action="#{myBean.doFunc}">
      <f:ajax event="action" render="Panel_X"/>
      <h:outputText value="YY" />
   </h:commandLink>
</h:panelGroup>

これがバッキングBeanです。

@ManagedBean(name = "magicBean")
@SessionScoped
public class MagicWordBean {

   public boolean show_X = true;

   /** getter and setter of show_X **/

   public String doFunc() {

      showX = !showX;
      return "";
   }
}

正しく行っているかどうかはわかりませんが、うまくいかないことが1つあります。最初にページが読み込まれると、XXワードが表示されます。XXワードをクリックしても、YYワードは表示されず、XXワードが残ります。

これに関する手がかりはありますか?

4

1 に答える 1

2

それがあなたの問題だと思いrender="Panel_Y"ます。そもそもページにレンダリングされていないものをレンダリングしようとしているのです。2番目のパネルでを再評価する親/コンテナ(つまり、両方のパネルを含むh:form)をレンダリングしてみてくださいrendered="#{magicBean.show_X == false}"。読みやすくするために、後で変更することを提案することもできrendered="#{magicBean.show_Y}"ます...

于 2012-10-07T08:20:43.683 に答える