2.2M1 regression: DataTable not sortable if set to rendered=

UI Components for JSF
Post Reply
cj91
Posts: 96
Joined: 04 Feb 2010, 00:07

23 Sep 2010, 23:42

Glassfishv3.0.1
Mojarra 2.0.3
Works: 2.1
Doesn't work: 2.2M1

Synopsis: If you have a datatable set to rendered=false during initial page load, then later the rendered attribute is set to true, and the containing form is updated, the datatable will appear on the page correctly, however it is not sortable.

Code: Select all

<h:form prependId="false" id="claimSearchForm">
	<p:commandButton value="${msgs.search}" id="searchButton"
		action="#{claimHistoryMB.searchClaims}"
		ajax="true" update="claimSearchForm,claimHistoryListForm">
</h:form>
<h:form prependId="false" id="claimHistoryListForm">
	<c:forEach items="#{userMB.currentUserAndFamily}" var="member">
		<p:panel rendered="#{claimHistoryMB.memberIsSelected(member)}">
			<p:dataTable var="claim" value="#{claimHistoryMB.memberClaims[member]}" dynamic="true">
				<p:column sortBy="#{claim.fillDate}" styleClass="col_fill_date">
					<f:facet name="header">
						<h:outputText value="${msgs.fill_date}" />
					</f:facet>
					<h:outputText value="#{claim.fillDate}" converter="i18nDateConverter" />
				</p:column>
			</p:dataTable>
		</p:panel>
	</c:forEach>
</h:form>
During your request, say #{userMB.currentUserAndFamily} gives you two Members. However, #{claimHistoryMB.memberIsSelected(member)} only returns true for the first member. So one datatable is rendered and it is sortable.

Now, select the additional member and you click 'searchButton' above. Now, after you do that, #{claimHistoryMB.memberIsSelected(member)} evaluates true to everyone. So two datatables appear.

The second datatable is not sortable in 2.2M1, however it's sortable in 2.1.

cj91
Posts: 96
Joined: 04 Feb 2010, 00:07

23 Sep 2010, 23:45

Workaround: Use one form (I have no idea why this works)

Code: Select all

<h:form prependId="false" id="claimSearchForm">
   <p:commandButton value="${msgs.search}" id="searchButton"
      action="#{claimHistoryMB.searchClaims}"
      ajax="true" update="claimSearchForm">
   <c:forEach items="#{userMB.currentUserAndFamily}" var="member">
      <p:panel rendered="#{claimHistoryMB.memberIsSelected(member)}">
         <p:dataTable var="claim" value="#{claimHistoryMB.memberClaims[member]}" dynamic="true">
            <p:column sortBy="#{claim.fillDate}" styleClass="col_fill_date">
               <f:facet name="header">
                  <h:outputText value="${msgs.fill_date}" />
               </f:facet>
               <h:outputText value="#{claim.fillDate}" converter="i18nDateConverter" />
            </p:column>
         </p:dataTable>
      </p:panel>
   </c:forEach>
</h:form>

callahan
Posts: 768
Joined: 27 May 2010, 22:52

24 Sep 2010, 09:11

Hi,

I looks like you are having the issue discussed here http://primefaces.prime.com.tr/forum/vi ... f=3&t=4554

cj91
Posts: 96
Joined: 04 Feb 2010, 00:07

24 Sep 2010, 15:51

Yeah, sounds like it. That would explain one the "one form" approach works

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 40 guests