1 Reply Latest reply on Jun 11, 2010 2:09 AM by Andrew Wheeler

    framework:entity-home with framework:entity-query for simple admin

    Andrew Wheeler Newbie

      Instead of writing endless java boilerplate code handle simple reference data administration I want to use entity-home and entity-query in components.xml.




         <framework:entity-query name="identificationTypes" ejbql="from IdentificationType order by description" scope="event"/>
         <framework:entity-home entity-class="sample.model.party.IdentificationType" name="identificationTypeHome" scope="event"/>
      



      The edit page is rather simple with a form and a clickable list in a datatable. The list invokes the page with the primary key of the entity as a parameter.


          <h:form id="form">
              <rich:panel header="Identification Type" id="identificationTypePanel">
                  <s:decorate id="descriptionDecoration" template="/layout/edit.xhtml">
                      <ui:define name="label">Description:</ui:define>
                      <h:inputText id="description" size="50" maxlength="50" value="#{identificationTypeHome.instance.description}" required="true">
                          <a:support event="onblur" reRender="descriptionDecoration" bypassUpdates="true" ajaxSingle="true" limitToList="true"/>
                      </h:inputText>
                  </s:decorate>
                  
                  <s:decorate id="expiresDecoration" template="/layout/edit.xhtml">
                      <ui:define name="label">Expires:</ui:define>
                          <h:selectBooleanCheckbox value="#{identificationTypeHome.instance.expires}"/>  
                  </s:decorate>            
              
                  <div style="clear:both">
                      <span class="required">*</span> 
                      required fields
                  </div>
              </rich:panel>
                      
              <div class="action-buttons">
                  <h:commandButton id="save" value="Save" action="#{identificationTypeHome.persist}" rendered="#{!identificationTypeHome.managed}"/>  
                  <h:commandButton id="update" value="Save" action="#{identificationTypeHome.update}" rendered="#{identificationTypeHome.managed}"/>
                  <h:commandButton id="delete" value="Delete" action="#{identificationTypeHome.remove}" rendered="#{identificationTypeHome.managed}"/>
                  <h:commandButton id="clear" value="Clear" action="#{identificationTypeHome.clearInstance}"/>
                  <s:button id="cancel" value="Cancel" propagation="end" action="home.authorised"/>
              </div>
      
                <rich:dataTable id="identificationTypeList" var="i"
                           value="#{identificationTypes.resultList}" 
                        rendered="#{not empty identificationTypes.resultList}">
                     <h:column>
                         <f:facet name="header">Description</f:facet>
                               <s:link value="#{i.description}">
                                    <f:param name="id" value="#{i.identificationTypeId}"/>
                               </s:link>            
                     </h:column>
                 </rich:dataTable>
          </h:form>
      



      The problem is that when creating a new entry using identificationTypeHome.persist the entity is not added to the list. I can see the the list is retrieved before the persist in the console window.


      As the identificationTypeHome.persist is in the Invoke Application phase and the entity-query should be invoked in the Render Response phase this must be persistence flushing problem. The entityManager probably does not flush until the end of the Render Response phase.


      Adding


      <begin-conversation join="true" flush-mode="commit"/>
      



      to my identificationType.page.xml does not make a difference (I don't really need to start a conversation!).



      There is no problem with identificationTypeHome.update - the new values appear in the list.


      Any thoughts on how to force the flush?