3 Replies Latest reply on Aug 28, 2009 1:23 AM by Arbi Sookazian

    dataTable, extendedDataTable, and concurrent conversations

    David Hibbs Newbie

      I'm doing a quick demonstration project to show off some of what SEAM and RichFaces can do, working from a base datamodel.  One of the features that the users really want is to be able to filter through the data based on a value entered in the headers.  Fortunately, both dataTable and extendedDataTable support this!


      My page is very similar to what is found in the LiveDemo.  The problem I am having is that when I try to use the filter fields, I often encounter the classic HTTP Status 503 - Concurrent call to conversation error.  I can avoid it by typing very s l o w l y, but if I type quickly and/or use backspace to correct a typo it will error out.


      I have tinkered with the page, switching tags back and forth and here is what I've found:
      1) Filtering almost never works properly in Firefox 3.0.12 -- it shows the above conversation error.
      2) Using extendedDataTable fails in IE 7 -- I get the message The conversation ended, timed out or was processing another request
      3) When I switch back to a basic dataTable, it works fine in IE -- but the dataScroller controller doesn't render.
      4) The LiveDemo pages work fine, but they don't use the exact combination of extendedDataTable, dataScroller, and the built-in filtering that I want to use.
      5) New discovery... when I reduce the table to 2 columns, it works OK.  Gradually adding columns, I can get up to 5 columns with filters and it still works.  When I add a 6th column with a filter... I can sometimes get a concurrent conversation error.  With a 7th column, it is highly consistent about giving me the error.


      It appears that the more filter fields you add, the more likely you are to encounter an error.  Has anyone else seen this?  Can anyone else reproduce it--is it a bug?


      Relevant xhtml content:



                          <rich:extendedDataTable value="#{rfpResponsesList.resultList}"
                               var="_rfpResponses" id="rfpResponsesList" sortMode="multi"
                               selectionMode="single"
                               rowClasses="datagridRowAltStyle,datagridRowStyle"
                               rows="20" reRender="ds">
                               <rich:column sortable="true" sortBy="#{_rfpResponses.id}"
                                    filterBy="#{_rfpResponses.id}" filterEvent="onblur" width="60px"
                                    label="Response ID">
                                    <f:facet name="header">
                                         <ui:include src="layout/sort.xhtml">
                                              <ui:param name="entityList" value="#{rfpResponsesList}" />
                                              <ui:param name="propertyLabel" value="Id" />
                                              <ui:param name="propertyPath" value="rfpResponses.id" />
                                         </ui:include>
                                    </f:facet>
                                    <h:outputText value="#{_rfpResponses.id}" />
                               </rich:column>
                               <rich:column sortable="true" sortBy="#{_rfpResponses.city}"
                                    filterBy="#{_rfpResponses.city}" filterEvent="onkeyup"
                                    width="90px" label="City">
                                    <f:facet name="header">
                                         <ui:include src="layout/sort.xhtml">
                                              <ui:param name="entityList" value="#{rfpResponsesList}" />
                                              <ui:param name="propertyLabel" value="City" />
                                              <ui:param name="propertyPath" value="rfpResponses.city" />
                                         </ui:include>
                                    </f:facet>
                                    <h:outputText value="#{_rfpResponses.city}" />
                               </rich:column>
                               <rich:column sortable="true" sortBy="#{_rfpResponses.company}"
                                    filterBy="#{_rfpResponses.company}" filterEvent="onkeyup"
                                    width="90px" label="Company">
                                    <f:facet name="header">
                                         <ui:include src="layout/sort.xhtml">
                                              <ui:param name="entityList" value="#{rfpResponsesList}" />
                                              <ui:param name="propertyLabel" value="Company" />
                                              <ui:param name="propertyPath" value="rfpResponses.company" />
                                         </ui:include>
                                    </f:facet>
                                    <h:outputText value="#{_rfpResponses.company}" />
                               </rich:column>
                               <rich:column sortable="true"
                                    sortBy="#{_rfpResponses.dateResponded}"
                                    filterBy="#{_rfpResponses.dateResponded}" filterEvent="onkeyup"
                                    width="100px" label="Date Responded">
                                    <f:facet name="header">
                                         <ui:include src="layout/sort.xhtml">
                                              <ui:param name="entityList" value="#{rfpResponsesList}" />
                                              <ui:param name="propertyLabel" value="Date responded" />
                                              <ui:param name="propertyPath" value="rfpResponses.dateResponded" />
                                         </ui:include>
                                    </f:facet>
                                    <h:outputText value="#{_rfpResponses.dateResponded}">
                                         <s:convertDateTime type="date" dateStyle="short" />
                                    </h:outputText>
                               </rich:column>
                               <rich:column sortable="true" sortBy="#{_rfpResponses.email}"
                                    filterBy="#{_rfpResponses.email}" filterEvent="onkeyup"
                                    width="150px" label="Email">
                                    <f:facet name="header">
                                         <ui:include src="layout/sort.xhtml">
                                              <ui:param name="entityList" value="#{rfpResponsesList}" />
                                              <ui:param name="propertyLabel" value="Email" />
                                              <ui:param name="propertyPath" value="rfpResponses.email" />
                                         </ui:include>
                                    </f:facet>
                                    <h:outputText value="#{_rfpResponses.email}" />
                               </rich:column>
                               <rich:column sortable="true" sortBy="#{_rfpResponses.name}"
                                    filterBy="#{_rfpResponses.name}" filterEvent="onkeyup"
                                    width="90px" label="Name">
                                    <f:facet name="header">
                                         <ui:include src="layout/sort.xhtml">
                                              <ui:param name="entityList" value="#{rfpResponsesList}" />
                                              <ui:param name="propertyLabel" value="Name" />
                                              <ui:param name="propertyPath" value="rfpResponses.name" />
                                         </ui:include>
                                    </f:facet>
                                    <h:outputText value="#{_rfpResponses.name}" />
                               </rich:column>
                               <rich:column sortable="true" sortBy="#{_rfpResponses.phone}"
                                    filterBy="#{_rfpResponses.phone}" filterEvent="onkeyup"
                                    width="90px" label="Phone">
                                    <f:facet name="header">
                                         <ui:include src="layout/sort.xhtml">
                                              <ui:param name="entityList" value="#{rfpResponsesList}" />
                                              <ui:param name="propertyLabel" value="Phone" />
                                              <ui:param name="propertyPath" value="rfpResponses.phone" />
                                         </ui:include>
                                    </f:facet>
      
                                    <h:outputText value="#{_rfpResponses.phone}" />
                               </rich:column>
      
      
                               <f:facet name="footer">
                                    <rich:datascroller id="ds" align="left" renderIfSinglePage="false"></rich:datascroller>
                               </f:facet>
      
                          </rich:extendedDataTable>