Ajax4jsf select update in same page using EntityQuery
carlpritchett Mar 6, 2008 2:50 PMHi,
I'm trying to ajax enable a seam-gen created application. I have an orderItem where you can select a plant to add to it. I have merged the plant selection page with the orderItem page.
It almost works - the search for plants updates the results, but when I select a item the original search results (created on page load) are used (not the new ajax rendered search results). I don't know how to update the real model (the page shows the correct results, but it's not what the commandLink picks - like the commandLink is ignoring the ajax update of the search resutls).
How do I update the search results so the orderItem.instance.plant is set with the correct value?
Heres my attempt - all objects are seam-generated i.e. EntityHome and EntityQuery:
<ui:define name="body"> <h:messages globalOnly="true" styleClass="message" id="globalMessages"/> <a:outputPanel id="selectedPlantForm"> <h:form id="orderItem" styleClass="edit"> <rich:panel> <f:facet name="header">#{orderItemHome.managed ? 'Edit' : 'Add'} OrderItem</f:facet> <s:decorate id="numberOrderedDecoration" template="layout/edit.xhtml"> <ui:define name="label">number Ordered</ui:define> <h:inputText id="numberOrdered" required="true" value="#{orderItemHome.instance.numberOrdered}"> <a:support event="onblur" reRender="numberOrderedDecoration" bypassUpdates="true"/> </h:inputText> </s:decorate> <s:decorate id="plantDecoration" template="layout/edit.xhtml"> <ui:define name="label">Plant</ui:define> <h:outputText id="plantName" value="#{orderItemHome.instance.plant.name}" rendered="#{orderItemHome.instance.plant != null}"> </h:outputText> <h:outputText value="No plant Selected" rendered="#{orderItemHome.instance.plant == null}"/> </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="#{orderItemHome.persist}" disabled="#{!orderItemHome.wired}" rendered="#{!orderItemHome.managed}"/> <h:commandButton id="update" value="Save" action="#{orderItemHome.update}" rendered="#{orderItemHome.managed}"/> <h:commandButton id="delete" value="Delete" action="#{orderItemHome.remove}" rendered="#{orderItemHome.managed}"/> <s:button id="done" value="Done" propagation="end" view="/OrderItem.xhtml" rendered="#{orderItemHome.managed}"/> <s:button id="cancel" value="Cancel" propagation="end" view="/#{empty orderItemFrom ? 'OrderItemList' : orderItemFrom}.xhtml" rendered="#{!orderItemHome.managed}"/> </div> </h:form> </a:outputPanel> <h:form id="plantSearch" styleClass="edit"> <rich:simpleTogglePanel label="Plant search parameters" switchType="ajax"> <s:decorate template="layout/display.xhtml"> <ui:define name="label">name</ui:define> <h:inputText id="name" value="#{plantList.plant.name}"/> </s:decorate> <s:decorate template="layout/display.xhtml"> <ui:define name="label">code</ui:define> <h:inputText id="code" value="#{plantList.plant.code}"/> </s:decorate> </rich:simpleTogglePanel> <div class="actionButtons"> <a:commandButton id="search" value="Search" action="#{plantList.refresh()}" reRender="searchResults1, selectedPlantForm"/> </div> </h:form> <a:outputPanel id="searchResults1"> <h:form id="plantSearchResults" styleClass="edit"> <rich:panel> <f:facet name="header">Plant search results</f:facet> <div class="results" id="plantListResults"> <h:outputText value="No plant exists" rendered="#{empty plantList.resultList}"/> <rich:dataTable id="plantList" var="plant" value="#{plantList.resultList}" rendered="#{not empty plantList.resultList}"> <h:column> <f:facet name="header"> <s:link styleClass="columnHeader" value="Plant Id #{plantList.order=='plantId asc' ? messages.down : ( plantList.order=='plantId desc' ? messages.up : '' )}"> <f:param name="order" value="#{plantList.order=='plantId asc' ? 'plantId desc' : 'plantId asc'}"/> </s:link> </f:facet> #{plant.plantId} </h:column> <h:column> <f:facet name="header"> <s:link styleClass="columnHeader" value="Name #{plantList.order=='name asc' ? messages.down : ( plantList.order=='name desc' ? messages.up : '' )}"> <f:param name="order" value="#{plantList.order=='name asc' ? 'name desc' : 'name asc'}"/> </s:link> </f:facet> #{plant.name} </h:column> <h:column> <f:facet name="header">Action</f:facet> <a:commandLink value="Select #{plant.name} #{plant.plantId}" action="#{orderItemHome.getInstance().setPlant(plant)}" reRender="selectedPlantForm, searchResults1" /> </h:column> </rich:dataTable> </div> </rich:panel> </h:form> </a:outputPanel> </ui:define>
Regards,
Carl.