java - Primefaces 选项卡更改通知

标签 java jsf primefaces

我们使用 PrimeFaces 3.3.1、Mojarra 2.1.10 和 Tomcat 7.0.26。

我们应用程序中的所有组件都是以编程方式创建的,并且仅绑定(bind)页面上的根组件。这是页面——模板的一部分——绑定(bind)到根组件,面板称为 rootPanel:

<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方法?

最佳答案

经过几天的实验,我们找到了解决方案。我们将“@parent”值设置为 setProcess 方法,只有该值才有效,并从 MethodExpression 的参数列表中删除 TabChangedEvent。经过这些更改后,它工作正常。

代码:

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");

关于java - Primefaces 选项卡更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11506771/

相关文章:

java - 由 : java. lang.ClassCastException 引起 : java. lang.Long 无法转换为

spring-mvc - 是否可以使用 Spring MVC + PrimeFaces?

javascript - 当我点击 Primefaces 上的重置按钮时,如何将焦点设置在 inputText 上

java - 如何将 JSF 扩展库用作 OSGI 包

java - 如果 DatePickerDialog 被取消,如何禁用 TimePickerDialog?

java - Spring Security : Custom Login without backing bean, 仅使用 spring security 配置作为 j_spring_security_check

使用 flex-plugin 部署时的 Java 堆空间

jsf - 使用 JSF Faces Flow 代替普通导航系统的优势

java - 查找给定字符串中字符的重复次数并对其进行排序?

java.io.FileNotFoundException : (Access is denied) when i have permission to the file