1

PrimeFaces 3.3.1、Mojarra 2.1.10、Tomcat 7.0.26 を使用しています。

アプリケーションのすべてのコンポーネントはプログラムで作成され、ページのルート コンポーネントのみがバインドされます。これは、テンプレートの一部であるページであり、ルート コンポーネントである rootPanel と呼ばれる Panel にバインドされています。

<ui:composition template="/layout/template.xhtml"
   xmlns="http://www.w3.org/1999/xhtml"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:porta="http://java.sun.com/jsf/composite/porta"
   xmlns:p="http://primefaces.org/ui">

   <ui:define name="body">
      <h:messages globalOnly="true" styleClass="message" />
      <p:ajaxStatus onstart="statusDialog.show();"
                    onsuccess="statusDialog.hide();" />

      <p:dialog modal="true" widgetVar="statusDialog" header=".::."
                draggable="false" closable="false">
         <p:graphicImage value="/img/progressbar.gif" />
      </p:dialog>

      <h:form id="initForm" name="initform">
         <p:panel id="rootPanelId" binding="#{applicationErp.rootPanel}" 
                  rendered="true">
         </p:panel>
       </h:form>
   </ui:define>
</ui:composition>

これは、TabView コンポーネントをプログラムで作成した方法です。

mainTabbedPane = new TabView();
mainTabbedPane.setId("formErpMainTabViewId");
mainTabbedPane.setStyle("height: 100%; width: 100%;");

AjaxBehavior ajaxBehavior = new AjaxBehavior();
MethodExpression methodExpression = FacesUtil.createMethodExpression("#{formerpmain.tabChanged}", Void.class, new Class<?>[]{TabChangeEvent.class});

ajaxBehavior.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(methodExpression));
ajaxBehavior.setListener(methodExpression);
ajaxBehavior.setUpdate(":initForm:formErpMainTabViewId");

mainTabbedPane.addClientBehavior("tabChange",ajaxBehavior);

これは tabChanged メソッドです:

public void tabChanged(TabChangeEvent event){
  requestPartialRendering();
}

上記の MethodExpression で指定されたメソッド tabChanged は、タブの変更時に呼び出されることはありません。タブの変更時に呼び出されるメソッドを指定するこの正しい方法はありますか? タブで呼び出されるBeanメソッドを指定する方法が変更されましたか?

4

1 に答える 1

1

数日間の実験の後、解決策が見つかりました。「@parent」値を setProcess メソッドに設定します。その値のみが機能し、TabChangedEvent を MethodExpression の引数のリストから削除します。これらの変更後、正常に動作します。

コード:

AjaxBehavior ajaxBehavior = new AjaxBehavior();
MethodExpression methodExpression = FacesUtil.createMethodExpression(
        "#{formerpmain.onTabChange}", void.class, new Class<?>[]{});

ajaxBehavior.addAjaxBehaviorListener(
        new AjaxBehaviorListenerImpl(methodExpression));
ajaxBehavior.setListener(methodExpression);
ajaxBehavior.setProcess("@parent");
于 2012-07-17T14:14:52.800 に答える