a4j:commandButton not reRendering rich:dataTable
sandman202 Jan 24, 2009 9:22 PMMy project was created using seam-gen. It uses Richfaces as well. My project is similar to the format used in Seam-in-Action examples.
With that said, here is my problem. I have InFilesEdit.xhtml which has an a4j:commandButton to validate some imported records. Within the InFilesEdit.xhtml is a dataTable showing the imported records. When I press the a4j:commandButton the action is performed, which is successful. Once the action is completed, I want the dataTable to be reRendered showing the updated status. However, it does not, unless I refresh my browser.
I am unable to get this to work properly. How can I get this to work?
InFilesEdit.xhtml
<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:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
template="/layout/template.xhtml">
<ui:define name="body">
<a4j:form id="inFilesForm" styleClass="edit" enctype="multipart/form-data">
<rich:panel>
<f:facet name="header">#{inFilesHome.managed ? 'Edit' : 'Add'} InFiles</f:facet>
<s:decorate id="nameDecoration" template="/layout/display.xhtml">
<ui:define name="label">Name</ui:define>
<h:inputTextarea id="name"
cols="80"
rows="3"
disabled="true"
value="#{inFilesHome.instance.name}"/>
</s:decorate>
<s:decorate id="typeDecoration" template="/layout/edit.xhtml">
<ui:define name="label">Type</ui:define>
<h:selectOneMenu id="inFilesType"
styleClass="selectOneMenu"
value="#{inFilesHome.instance.type}"
disabled="true">
<s:selectItems value="#{inFilesHome.inFileTypes}" var="inFilesType" label="#{inFilesType.value}"
noSelectionLabel=""/>
<s:convertEnum />
</h:selectOneMenu>
</s:decorate>
<s:decorate id="statusDecoration" template="/layout/edit.xhtml">
<ui:define name="label">Status</ui:define>
<h:selectOneMenu id="inFilesStatus"
styleClass="selectOneMenu"
value="#{inFilesHome.instance.status}"
disabled="true">
<s:selectItems value="#{inFilesHome.inFileStatuses}" var="inFilesStatus" label="#{inFilesStatus.value}"
noSelectionLabel=""/>
<s:convertEnum />
</h:selectOneMenu>
</s:decorate>
<s:decorate id="createdOnDecoration" template="/layout/display.xhtml">
<ui:define name="label">Created On</ui:define>
<rich:calendar id="createdOn"
value="#{inFilesHome.instance.createdOn}"
required="true"
disabled="true"
datePattern="MM/dd/yyyy"
event="onblur"
reRender="createdOnDecoration"
style="width: auto;">
</rich:calendar>
</s:decorate>
<div style="clear:both">
<span class="required">*</span>
required fields
</div>
</rich:panel>
<div class="actionButtons">
<h:commandButton id="save"
value="Save"
action="#{inFilesHome.persist}"
rendered="#{!inFilesHome.managed}"/>
<h:commandButton id="delete"
value="Delete"
action="#{inFilesHome.remove}"
immediate="true"
rendered="#{inFilesHome.managed}"/>
<s:button propagation="end"
id="done"
value="Done"
view="/admin/InFiles.xhtml"
rendered="#{inFilesHome.managed}"/>
<s:button propagation="end"
id="cancel"
value="Cancel"
view="/admin/#{empty inFilesFrom ? 'InFilesList' : inFilesFrom}.xhtml"
rendered="#{!inFilesHome.managed}"/>
<a4j:commandButton id="validate"
value="Validate"
action="#{inFilesHome.validate}"
rendered="#{inFilesHome.managed}"
disabled="#{!inFilesHome.readyForValidation}"
ajaxSingle="false"
reRender="out2" />
<a4j:commandButton id="refresh"
value="Refresh"
reRender="inFilesForm,out2"/>
<h:commandButton id="post"
value="Post"
action="#{inFilesHome.post}"
rendered="#{inFilesHome.managed}"
disabled="#{!inFilesHome.readyForPosting}"/>
</div>
<a4j:outputPanel id="out2">
<rich:dataTable id="inCityStateZipList"
var="_inCityStateZip"
value="#{inCityStateZipList.resultList}">
<h:column>
<f:facet name="header">Country</f:facet>
#{_inCityStateZip.country}
</h:column>
<h:column>
<f:facet name="header">City</f:facet>
#{_inCityStateZip.city}
</h:column>
<h:column>
<f:facet name="header">State</f:facet>
#{_inCityStateZip.province}
</h:column>
<h:column>
<f:facet name="header">Zipcode</f:facet>
#{_inCityStateZip.zipcode}
</h:column>
<h:column>
<f:facet name="header">County</f:facet>
#{_inCityStateZip.county}
</h:column>
<h:column>
<f:facet name="header">Status</f:facet>
#{_inCityStateZip.status.value}
</h:column>
<h:column>
<f:facet name="header">Action</f:facet>
<s:link view="/admin/#{empty from ? 'InCityStateZip' : from}.xhtml"
value="Select"
id="inCityStateZip"
propagation="none">
<f:param name="inCityStateZipFrom"
value="#{inCityStateZipFrom}"/>
<f:param name="inCityStateZipId"
value="#{_inCityStateZip.id}"/>
</s:link>
</h:column>
</rich:dataTable>
<div class="tableControl">
<s:link view="/admin/#{inCityStateZipFrom}.xhtml"
rendered="#{inCityStateZipList.previousExists}"
value="#{messages.left}#{messages.left} First Page"
id="inCityStateZipListFirstPage">
<f:param name="firstResult" value="0"/>
</s:link>
<s:link view="/admin/#{inCityStateZipFrom}.xhtml"
rendered="#{inCityStateZipList.previousExists}"
value="#{messages.left} Previous Page"
id="inCityStateZipListPreviousPage">
<f:param name="firstResult"
value="#{inCityStateZipList.previousFirstResult}"/>
</s:link>
<s:link view="/admin/#{inCityStateZipFrom}.xhtml"
rendered="#{inCityStateZipList.nextExists}"
value="Next Page #{messages.right}"
id="inCityStateZipListNextPage">
<f:param name="firstResult"
value="#{inCityStateZipList.nextFirstResult}"/>
</s:link>
<s:link view="/admin/#{inCityStateZipFrom}.xhtml"
rendered="#{inCityStateZipList.nextExists}"
value="Last Page #{messages.right}#{messages.right}"
id="inCityStateZipListLastPage">
<f:param name="firstResult"
value="#{inCityStateZipList.lastFirstResult}"/>
</s:link>
</div>
</a4j:outputPanel>
</a4j:form>
</ui:define>
</ui:composition>