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

    a4j:jsFunction breaks within composite component

    Anil Arora Newbie

      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.