2 Replies Latest reply on Aug 26, 2013 12:44 PM by anilarora

    a4j:jsFunction breaks within composite component

    anilarora

      Another composite component issue with RF 4.3.3.Final on Mojarra 2.1.25 on JBoss AS 7.1.3.Final.  (Let me know if it makes sense to enter a bug on this...)

       

       

      My composite component definition:

       

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:cc="http://java.sun.com/jsf/composite"
          xmlns:a4j="http://richfaces.org/a4j">
      
         <cc:interface/>
      
         <cc:implementation>
             <div id="#{cc.clientId}" >
                 <h:commandLink action="#{tableTestBean.updateTableData()}" ><f:ajax />test inside of composite</h:commandLink>
      
                 <a4j:jsFunction name="loadTableDataInside" 
                                 immediate="true"
                                 action="#{tableTestBean.updateTableData()}"
                                 onbegin="alert('begin inside');"
                                 oncomplete="alert('end inside');">  
                 </a4j:jsFunction>
             </div> 
         </cc:implementation>
      </html>
      

       

       

      And my sample xhtml

       

       

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a4j="http://richfaces.org/a4j"
          xmlns:rich="http://richfaces.org/rich"
          xmlns:test="http://java.sun.com/jsf/composite/test">
      
         <h:form id="mainform">
              <h:panelGrid id="panel" >
                  <h:commandLink action="#{tableTestBean.updateTableData()}" ><f:ajax />test outside of composite</h:commandLink>
                  <test:commandActionTest/>
      
                  <a4j:jsFunction name="loadTableDataOutside" 
                                  immediate="true"
                                  action="#{tableTestBean.updateTableData()}"
                                  onbegin="alert('begin');"
                                  oncomplete="alert('end');">  
                  </a4j:jsFunction>
              </h:panelGrid>
          </h:form>
      </ui:composition>
      

       

       

      I am testing this out using chrome and manually invoking the javascript.  I see the javascript functions being registered.  So, if I run loadTableDataOutside(), I see both alerts and I see my updateTableData() action being called.  If I run loadTableDataInside(), I do not see both alerts and updateTableData() does not get called.

       

      The commandLink also has an issue.  The outside link works, but the inside link does not.  If I remove the jsFunction definition from the composite component, then the inside link works.