10 Replies Latest reply on Dec 4, 2007 2:38 PM by Arbi Sookazian

    RC3 scrollableDataTable problem/comments

    richajon Newbie

      Hi everyone

      My exploration of the scrollableDataTable components continues and I got the following questions/comments:

      1)

      In the functionnal specification document under "FuncSpec-RF-IDG-CL-030-1.0 Header Facet" it is specified:

      "Header should be able to perform the sorting by its content after click (described in IDG-CF requirements). So the cursor must be changed to ?hand? after hover the header except the selects or text fields inside."

      Has this been forgot? And, when a column would be marked as scrollable="false", will the cursor be a hand or the default browser cursor?


      2)

      The row height does not adjust to the content of the cells. I have a <h:datatable> that renders content in one of my cells and the content of the cell is clipped. To fix this I override the "dr-sdt-bcbody" style class and put "height: 100%". The generated div seem to be the element clipping the content not the cell itself. A side effect of this work-around is that the vertical scrollbar disappear even though the content is higher than the display area. Any suggestions?

      I took a screen shot of the problem:

      http://www.23hq.com/richajon/photo/2349912/view-large

      3)

      Concerning the sort feature of the scrollableDataTable: I played around with the sorting feature of the component and found odd the way you specify the item to be used for sorting by using the id="" attribute of the rich:column.

      Here's why:

      Everywhere in JSF you can use EL expression to browse the class members of the item on which you are iterating. So sometime the value displayed in the cell is in fact the description string of a class member of the iteration.

      ex:

      <rich:scrollableDataTable value="myBean.Products" var="product">
      <rich:column>
      <h:outputText value="item.car.description"/>
      </rich:column>
      </...>

      To retrieve the car description JSF do the following: product.ProductType.getDescription().

      Following outputText logic, the id="" attribute should be: "car.description". But this is not a standard value for the id attribute and it crashes.

      To work around this, you need to put a getProductTypeDescription at the Product class level so a String is returned. Then you have: id="carDescription" and the sort works fine.

      I feel that it breaks the pattern found everywhere in JSF which allows the user to navigate the hierarchy of class members in the beans through getters. Wouldn't it make more sense to put a "sortField" attribute and allow the user to put a full EL expression i.e: #{car.description} instead of using the id attribute?

      I hope this is helpfull

      Jon

        • 1. Re: RC3 scrollableDataTable problem/comments
          mgrouch Expert

          I also have lots of problems with scrollableDataTable.

          1) Vertical | in headers (the ones I'm supposed to use to resize columns)
          are not positioned properly in FireFox

          2) Performance of javascript to render this table is really bad
          (I've already sent info from FireBug javascript profiler)

          3) I've started getting exception. Why does it depend on java/awt/geom/Path2D$Float?

          Thanks

          17:32:55,078 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
          java.lang.NoClassDefFoundError: java/awt/geom/Path2D$Float
           at java.lang.Class.forName0(Native Method)
           at java.lang.Class.forName(Class.java:164)
           at org.ajax4jsf.resource.ResourceBuilderImpl.createResource(ResourceBuilderImpl.java:249)
           at org.ajax4jsf.renderkit.RendererBase.getResource(RendererBase.java:152)
           at org.ajax4jsf.renderkit.compiler.ResourceElement.findResource(ResourceElement.java:93)
           at org.ajax4jsf.renderkit.compiler.ResourceElement.getString(ResourceElement.java:81)
           at org.ajax4jsf.renderkit.compiler.ClassElement.getString(ClassElement.java:94)
           at org.ajax4jsf.renderkit.compiler.ClassElement.encode(ClassElement.java:59)
           at org.ajax4jsf.renderkit.compiler.ElementBase.encode(ElementBase.java:105)
           at org.ajax4jsf.renderkit.compiler.ElementBase.encode(ElementBase.java:105)
           at org.ajax4jsf.renderkit.compiler.RootElement.encode(RootElement.java:64)
           at org.ajax4jsf.renderkit.compiler.ElementBase.encode(ElementBase.java:73)
           at org.ajax4jsf.resource.TemplateCSSRenderer.send(TemplateCSSRenderer.java:81)
           at org.ajax4jsf.resource.InternetResourceBase.send(InternetResourceBase.java:373)
           at org.ajax4jsf.resource.ResourceLifecycle.send(ResourceLifecycle.java:89)
           at org.ajax4jsf.resource.InternetResourceService.load(InternetResourceService.java:336)
           at org.ajax4jsf.cache.LRUMapCache.load(LRUMapCache.java:116)
           at org.ajax4jsf.cache.LRUMapCache.get(LRUMapCache.java:87)
           at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:198)
           at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:144)
           at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:265)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
           at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
           at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
           at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
           at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
           at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
           at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
           at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
           at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
           at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
           at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
           at java.lang.Thread.run(Thread.java:595)
          


          • 2. Re: RC3 scrollableDataTable problem/comments
            Maksim Kaszynski Apprentice

            Hello everybody!
            Thanks for your feedback!

            2richajon

            In the functionnal specification document under "FuncSpec-RF-IDG-CL-030-1.0 Header Facet" it is specified:

            "Header should be able to perform the sorting by its content after click (described in IDG-CF requirements). So the cursor must be changed to ?hand? after hover the header except the selects or text fields inside."

            Has this been forgot? And, when a column would be marked as scrollable="false", will the cursor be a hand or the default browser cursor?


            Yup. Looks that we've forgotten to implement it.
            http://jira.jboss.com/jira/browse/RF-733


            The row height does not adjust to the content of the cells. I have a <h:datatable> that renders content in one of my cells and the content of the cell is clipped. To fix this I override the "dr-sdt-bcbody" style class and put "height: 100%". The generated div seem to be the element clipping the content not the cell itself. A side effect of this work-around is that the vertical scrollbar disappear even though the content is higher than the display area. Any suggestions?


            Scrollable data table supports fixed row height only. We may add variable row height feature in some later version, but it requires severe markup changes. If you want variable row height so badly, you may submit feature request to our jira.

            I feel that it breaks the pattern found everywhere in JSF which allows the user to navigate the hierarchy of class members in the beans through getters. Wouldn't it make more sense to put a "sortField" attribute and allow the user to put a full EL expression i.e: #{car.description} instead of using the id attribute?


            You are right that default sorting implementation is rendered useless with nested properties. But it seems to me that simply adding sortField property won't solve the problem in general. However, I'll try, and maybe there will be solution to the problem of complex properties.
            http://jira.jboss.com/jira/browse/RF-734

            2mgrouch

            1) Vertical | in headers (the ones I'm supposed to use to resize columns)
            are not positioned properly in FireFox

            http://jira.jboss.com/jira/browse/RF-689

            2) Performance of javascript to render this table is really bad
            (I've already sent info from FireBug javascript profiler)

            Issue you posted is already in progress. Watch jira status. As for server-side rendering - most of time is spent in seam components, not in RF scrollableDataTable.

            3) I've started getting exception. Why does it depend on java/awt/geom/Path2D$Float?


            It looks like RC you are using (RC3 I think) was built using jdk 1.6, and you are running on earlier jdk. The problem is solved - RC3 rebuilt with 1.5


            Cheers!



            • 3. Re: RC3 scrollableDataTable problem/comments
              richajon Newbie

              Hi

              Thanks for your reply and the bug reports.

              I looked for a workaround for the cell height problem and found out the following:

              1)

              The clipping problem I reported is not related to the cell but to the DIV container found in the cell. If you put a style class in the <rich:scrollableDataTable rowClasses=""> that set the height of the row to let say: 80px. The row will have a height of 80px but the DIV container withing that cell will clip it's content. The work around is the same: setting "dr-sdt-bcbody" style class height to 100%.

              http://www.23hq.com/richajon/photo/2362499/original

              2)

              There is a problem with the rowClasses="" attribute. It seems that no space is added at the beginning or the class names so the rendered markup is faulty. ex: if I put rowClasses="pepito", then the generated class attribute in the HTML will be as follow: <tr id="j_id118:j_id127:n:0" class="dr-sdt-rb rich-sdt-rowpepito">. Putting rowClasses=" pepito" fixes the problem.

              3)

              As for cell width variable height I think it is something important so I will open a request for it. I am sure a lot of people will expect the cell to adjust to their content.

              Thank you!

              • 4. Re: RC3 scrollableDataTable problem/comments
                richajon Newbie

                fix:

                ex: if I put rowClasses="pepito", then the generated class attribute in the HTML will be as follow:
                <tr id="j_id118:j_id127:n:0" class="dr-sdt-rb rich-sdt-row pepito ">.
                Putting rowClasses=" pepito" fixes the problem.
                


                • 5. Re: RC3 scrollableDataTable problem/comments
                  Maksim Kaszynski Apprentice

                   

                  "richajon" wrote:
                  fix:

                  ex: if I put rowClasses="pepito", then the generated class attribute in the HTML will be as follow:
                  <tr id="j_id118:j_id127:n:0" class="dr-sdt-rb rich-sdt-row pepito ">.
                  Putting rowClasses=" pepito" fixes the problem.
                  


                  fixed. in svn.

                  http://jira.jboss.com/jira/browse/RF-734 resolved as well

                  • 6. Re: RC3 scrollableDataTable problem/comments
                    richajon Newbie

                     

                    "maksimkaszynski" wrote:
                    "richajon" wrote:
                    fix:

                    ex: if I put rowClasses="pepito", then the generated class attribute in the HTML will be as follow:
                    <tr id="j_id118:j_id127:n:0" class="dr-sdt-rb rich-sdt-row pepito ">.
                    Putting rowClasses=" pepito" fixes the problem.
                    


                    fixed. in svn.


                    Hi

                    Thanks for the fix but unfortunately it is still broken. On the first render, the classes on the row will be correctly rendered: "class1 class2 class3". But when clicking on a header to sort the table, the row classes are re-rendered the wrong way: "class1 class2class3".

                    I looked to what was done by you guys and I figured that the problem can be fixed in the process method of the ScrollableDataTableBaseRenderer.java file line 346 and 362 of the current (aug 30th 2007) SVN version of the file.

                    Jon

                    • 7. Re: RC3 scrollableDataTable problem/comments
                      Rulin Sun Newbie

                      I also experienced some problems with scrollableDataTable:

                      1) When set column style of text-align:right, the header "|" is overlapped with header text.
                      2) When set column style of text-align:right, the headers and column bodies of the columns after frozen column will not align properly. The offset will be getting larger and larger as the column number increases.
                      3) There is no right site border of last frozen column, looks weired.
                      4) Sometime, I got javascript error of:
                      line 241:
                      Error: 'tagName' is null or not an object

                      Hopefully those problems will be addressed.

                      Thanks!

                      • 8. Re: RC3 scrollableDataTable problem/comments
                        Maksim Kaszynski Apprentice

                        In which browser do you get 4th item?

                        "rulinsun" wrote:
                        I also experienced some problems with scrollableDataTable:

                        1) When set column style of text-align:right, the header "|" is overlapped with header text.
                        2) When set column style of text-align:right, the headers and column bodies of the columns after frozen column will not align properly. The offset will be getting larger and larger as the column number increases.
                        3) There is no right site border of last frozen column, looks weired.
                        4) Sometime, I got javascript error of:
                        line 241:
                        Error: 'tagName' is null or not an object

                        Hopefully those problems will be addressed.

                        Thanks!



                        • 9. Re: RC3 scrollableDataTable problem/comments
                          Arbi Sookazian Master

                           

                          "maksimkaszynski" wrote:
                          In which browser do you get 4th item?

                          "rulinsun" wrote:
                          I also experienced some problems with scrollableDataTable:

                          1) When set column style of text-align:right, the header "|" is overlapped with header text.
                          2) When set column style of text-align:right, the headers and column bodies of the columns after frozen column will not align properly. The offset will be getting larger and larger as the column number increases.
                          3) There is no right site border of last frozen column, looks weired.
                          4) Sometime, I got javascript error of:
                          line 241:
                          Error: 'tagName' is null or not an object

                          Hopefully those problems will be addressed.

                          Thanks!



                          With IE 7.0 I'm having the same problem. I'm getting "Line 243. Error: 'tagname' is null or not an object." I'm running JBoss 4.2.2.GA and Seam2.0.0.GA. in the manifest.mf for richfaces-impl.jar that's deployed to default/deploy it's Implementation-Version: 3.1.2.GA for richfaces.

                          Here is the xhtml that produces the error:

                          <!DOCTYPE composition 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:s="http://jboss.com/products/seam/taglib"
                           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:rich="http://richfaces.ajax4jsf.org/rich"
                           xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
                           xmlns:c="http://java.sun.com/jstl/core"
                           template="layout/template.xhtml">
                          
                          
                          
                          <ui:define name="body">
                          
                           <script type="text/javascript"
                           src="seam/resource/remoting/resource/remote.js">
                           </script>
                          
                           <script type="text/javascript"
                           src="seam/resource/remoting/interface.js?noteAction">
                           </script>
                          
                           <script type="text/javascript"
                           src="seam/resource/remoting/interface.js?securityAuditAction">
                           </script>
                          
                           <script type="text/javascript"
                           src="js/securityAudit.js">
                           </script>
                          
                           <h:messages styleClass="message"/>
                          
                          
                          
                           <rich:panel>
                           <h:form id="mainForm">
                          
                           <h:outputText value="No Direct Reports" rendered="#{myAuditList != null and myAuditList.rowCount==0}"/>
                           <h:dataTable id="dataTable1" value="#{myAuditList}" var="myRow" rendered="#{myAuditList != null and myAuditList.rowCount > 0}"
                           styleClass="dataTable" rowClasses="oddRow, evenRow" frame="hsides">
                           <h:column>
                           <f:facet name="header">Status</f:facet>
                          
                           <h:graphicImage id="statusImage" value="/img/#{myRow[1].auditProgress}.gif"/>
                           </h:column>
                           <h:column>
                           <f:facet name="header">Employee Name</f:facet>
                          
                           <!-- siteId and employeeNumber hidden fields are used for all radio buttons -->
                           <h:outputText id="employeeName" value="#{myRow[0].id.employeeName}"/>
                           <h:inputHidden id="employeeNameHidden" value="#{myRow[0].id.employeeName}"/>
                           <h:inputHidden id="siteId" value="#{myRow[0].id.siteId}"/>
                           <h:inputHidden id="employeeNumber" value="#{myRow[0].id.employeeNumber}"/>
                           </h:column>
                          
                           <h:column>
                           <f:facet name="header">SiteId</f:facet>
                          
                           <h:outputText value="#{myRow[0].id.siteId}"/>
                           </h:column>
                          
                           <h:column>
                           <f:facet name="header">EmployeeNumber</f:facet>
                          
                           <h:outputText value="#{myRow[0].id.employeeNumber}"/>
                           </h:column>
                          
                           <h:column>
                           <f:facet name="header">Adjustment Limit</f:facet>
                          
                           <h:outputText value="#{myRow[0].id.employeeNumber}"/>
                           </h:column>
                          
                           <h:column>
                           <f:facet name="header">Account Approved?</f:facet>
                          
                           <h:panelGrid columns="2">
                           <h:selectOneRadio id="accountApprovedRB" value="#{myRow[1].icomsAccountApproved}">
                           <a4j:support event="onclick"
                           oncomplete="processNote(#{myAuditList.getRowIndex()}, 'accountApproved')"
                           action="#{noteAction.setRenderRadioButtons(myAuditList.getRowIndex(), myRow[1].icomsAccountApproved)}"
                           ajaxSingle="true"
                           reRender="mainForm"/>
                           <f:selectItems value="#{securityAuditAction.securityAuditRadioButtons}" />
                           </h:selectOneRadio>
                          
                           <h:graphicImage id="acctGraphic" value="/img/icon_edit.gif"
                           onclick="editNote(#{myAuditList.getRowIndex()}, 'accountApproved');"
                           rendered="#{noteAction.getRenderNoteGraphic(myAuditList.getRowIndex(), 'accountApproved') ||
                           securityAuditAction.getLoadedNote(myAuditList.getRowIndex(), 'accountApproved')}"/>
                           </h:panelGrid>
                           </h:column>
                          
                          
                           <h:column>
                           <f:facet name="header">Security Level Approved?</f:facet>
                          
                           <h:panelGrid columns="2">
                           <h:selectOneRadio id="securityLevelApprovedRB" value="#{myRow[1].securityLevelApproved}"
                           onclick="processNote(#{myAuditList.getRowIndex()}, 'secLevelApproved')"
                           rendered="#{noteAction.getRenderRadioButtons(myAuditList.getRowIndex())}">
                           <f:selectItems value="#{securityAuditAction.securityAuditRadioButtons}" />
                           </h:selectOneRadio>
                           <a4j:outputPanel layout="none">
                           <h:graphicImage id="securityLevelGraphic" value="/img/icon_edit.gif"
                           onclick="editNote(#{myAuditList.getRowIndex()}, 'secLevelApproved');"
                           rendered="#{noteAction.getRenderNoteGraphic(myAuditList.getRowIndex(), 'secLevelApproved') ||
                           securityAuditAction.getLoadedNote(myAuditList.getRowIndex(), 'secLevelApproved')}"/>
                           </a4j:outputPanel>
                           </h:panelGrid>
                           </h:column>
                          
                          
                           <h:column>
                           <f:facet name="header">Adjustment Limit Approved?</f:facet>
                          
                           <h:panelGrid columns="2">
                           <h:selectOneRadio id="adjustmentLimitApprovedRB" value="#{myRow[1].adjustmentLimitApproved}"
                           onclick="processNote(#{myAuditList.getRowIndex()}, 'adjLimitApproved')"
                           rendered="#{noteAction.getRenderRadioButtons(myAuditList.getRowIndex())}">
                           <f:selectItems value="#{securityAuditAction.securityAuditRadioButtons}" />
                           </h:selectOneRadio>
                           <h:graphicImage id="adjLimitGraphic" value="/img/icon_edit.gif"
                           onclick="editNote(#{myAuditList.getRowIndex()}, 'adjLimitApproved');"
                           rendered="#{noteAction.getRenderNoteGraphic(myAuditList.getRowIndex(), 'adjLimitApproved') ||
                           securityAuditAction.getLoadedNote(myAuditList.getRowIndex(), 'adjLimitApproved')}"/>
                           </h:panelGrid>
                           </h:column>
                          
                           <h:column>
                           <h:commandButton id="submitEmployee" value="Submit" action="#{securityAuditAction.submit}" style="visibility:hidden"/>
                           </h:column>
                          
                           </h:dataTable>
                          
                           </h:form>
                           </rich:panel>
                          
                           <center>
                           <a4j:status>
                           <f:facet name="start">
                           <h:graphicImage value="/img/spinner.gif" height="50" width="50"/>
                           </f:facet>
                           </a4j:status>
                           </center>
                          
                           <!-- note only -->
                           <rich:modalPanel id="mpNote" minHeight="200" minWidth="450"
                           height="500" width="500" zindex="2000">
                          
                           <f:facet name="header">
                           <a4j:form id="a4jHeaderForm1">
                           <h:outputText id="headerText1" value=""/>
                           </a4j:form>
                           </f:facet>
                          
                           <rich:scrollableDataTable value="#{noteAction.getNoteLogList()}" var="myRow" rows="10" height="50px" width="300px">
                           <rich:column>
                           <f:facet name="header">NoteText</f:facet>
                           <h:outputText value="#{myRow.noteText}"/>
                           </rich:column>
                          
                           <rich:column>
                           <f:facet name="header">TimeStamp</f:facet>
                           <h:outputText value="#{myRow.timeStamp}"/>
                           </rich:column>
                           </rich:scrollableDataTable>
                          
                           <a4j:form id="a4jMainForm1">
                           <h:panelGrid columns="2" style="vertical-align:middle">
                           <h:outputText id="description1" value=""/>
                           <BR/>
                           <h:inputTextarea id="noteText1" value="#{noteAction.noteText}" rows="6" cols="50">
                           <a4j:support event="onkeyup" reRender="out1" />
                           </h:inputTextarea>
                          
                           <h:panelGroup id="out1">
                           <a4j:commandButton id="submit1" value="submit" action="#{noteAction.submit('mpNote')}"
                           onclick="Richfaces.hideModalPanel('mpNote')" rendered="#{not empty noteAction.noteText2}"/>
                           </h:panelGroup>
                           <BR/>
                           <a4j:commandButton value="cancel" onclick="Richfaces.hideModalPanel('mpNote');unselectCurrentRadioButton()"/>
                           </h:panelGrid>
                           </a4j:form>
                           </rich:modalPanel>
                          
                           <!-- no note, row data submit only -->
                           <rich:modalPanel id="mpEmployeeSubmit" minHeight="200" minWidth="450"
                           height="500" width="500" zindex="2000">
                          
                           <f:facet name="header">
                           <a4j:form id="a4jHeaderForm2">
                           <h:outputText id="headerText2" value=""/>
                           </a4j:form>
                           </f:facet>
                          
                           <a4j:form id="a4jMainForm2">
                           <h:panelGrid columns="2" style="vertical-align:middle">
                           <h:outputText id="description2" value=""/>
                           <BR/>
                          
                           <a4j:commandButton value="submit" action="#{noteAction.submit('mpEmployeeSubmit')}" oncomplete="clickDataTableSubmit();Richfaces.hideModalPanel('mpEmployeeSubmit')"/>
                           <BR/>
                           <a4j:commandButton value="cancel" onclick="Richfaces.hideModalPanel('mpEmployeeSubmit');unselectCurrentRadioButton()"/>
                          
                           </h:panelGrid>
                           </a4j:form>
                           </rich:modalPanel>
                          
                           <!-- note and row data submit -->
                           <rich:modalPanel id="mpNoteAndEmployeeSubmit" minHeight="200" minWidth="450"
                           height="500" width="500" zindex="2000">
                          
                           <f:facet name="header">
                           <a4j:form id="a4jHeaderForm3">
                           <h:outputText id="headerText3" value=""/>
                           </a4j:form>
                           </f:facet>
                          
                           <a4j:form id="a4jMainForm3">
                           <h:panelGrid columns="2" style="vertical-align:middle">
                           <h:outputText id="description3" value=""/>
                           <BR/>
                          
                           <h:inputTextarea id="noteText3" value="#{noteAction.noteText}" rows="6" cols="50">
                           <a4j:support event="onkeyup" reRender="out3" />
                           </h:inputTextarea>
                          
                           <h:panelGroup id="out3">
                           <a4j:commandButton id="submit3" value="submit" action="#{noteAction.submit('mpNoteAndEmployeeSubmit')}" oncomplete="clickDataTableSubmit();Richfaces.hideModalPanel('mpNoteAndEmployeeSubmit')"
                           rendered="#{not empty noteAction.noteText2}"/>
                           </h:panelGroup>
                          
                           <BR/>
                          
                           <a4j:commandButton value="cancel" onclick="Richfaces.hideModalPanel('mpNoteAndEmployeeSubmit');unselectCurrentRadioButton()"/>
                           </h:panelGrid>
                           </a4j:form>
                           </rich:modalPanel>
                          
                           <!-- <a4j:commandButton value="click me" reRender="mainForm:dataTable1:0:securityLevelGraphic"/> -->
                          
                          
                          </ui:define>
                          </ui:composition>
                          


                          This xhtml works fine (no error):

                          <!DOCTYPE composition 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:s="http://jboss.com/products/seam/taglib"
                           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:rich="http://richfaces.ajax4jsf.org/rich"
                           xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
                           xmlns:c="http://java.sun.com/jstl/core"
                           template="layout/template.xhtml">
                          
                          
                          
                          <ui:define name="body">
                          
                           <h:form>
                           <rich:spacer height="30" />
                          
                           <rich:scrollableDataTable value="#{noteAction.getNoteLogList()}" var="myRow" rows="10" height="50px" width="300px">
                           <!-- <h:dataTable value="#{noteAction.getNoteLogList()}" var="myRow"> -->
                           <rich:column>
                           <f:facet name="header">NoteText</f:facet>
                           <h:outputText value="#{myRow.noteText}"/>
                           </rich:column>
                          
                           <rich:column>
                           <f:facet name="header">TimeStamp</f:facet>
                           <h:outputText value="#{myRow.timeStamp}"/>
                           </rich:column>
                           <!-- </h:dataTable> -->
                          
                           </rich:scrollableDataTable>
                           </h:form>
                          
                          </ui:define>
                          </ui:composition>


                          • 10. Re: RC3 scrollableDataTable problem/comments
                            Arbi Sookazian Master

                            the following reproduces the error with the above working xhtml:

                            <!DOCTYPE composition 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:s="http://jboss.com/products/seam/taglib"
                             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:rich="http://richfaces.ajax4jsf.org/rich"
                             xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
                             xmlns:c="http://java.sun.com/jstl/core"
                             template="layout/template.xhtml">
                            
                            
                            
                            <ui:define name="body">
                            
                             <!-- <h:form> -->
                             <rich:spacer height="30" />
                            
                             <rich:scrollableDataTable value="#{noteAction.getNoteLogList()}" var="myRow" rows="10" height="50px" width="300px">
                             <!-- <h:dataTable value="#{noteAction.getNoteLogList()}" var="myRow"> -->
                             <rich:column>
                             <f:facet name="header">NoteText</f:facet>
                             <h:outputText value="#{myRow.noteText}"/>
                             </rich:column>
                            
                             <rich:column>
                             <f:facet name="header">TimeStamp</f:facet>
                             <h:outputText value="#{myRow.timeStamp}"/>
                             </rich:column>
                             <!-- </h:dataTable> -->
                            
                             </rich:scrollableDataTable>
                             <!-- </h:form> -->
                            
                            </ui:define>
                            </ui:composition>


                            so it must be in a form for the error to not occur. Is this correct???