3 Replies Latest reply on Apr 5, 2008 5:44 PM by Pete Muir

    empty operator always returns false after a @DataModel refresh event

    Olivier Thierry Apprentice

      Hi,


      I encounter problems using @DataModel annotation and <rich:datatable> tag. The empty operator doesn't work when refreshing the content after an event is raised ; it always returns false.


      My @DataModel is as following :


      @org.jboss.seam.annotations.datamodel.DataModel
      protected VOTacheValidationDemandeAbsence[] listeDemandesAbsenceAValider;



      I have a @Factory method :



      @org.jboss.seam.annotations.Factory(value="listeDemandesAbsenceAValider")
      @javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRES_NEW)
      @org.jboss.seam.annotations.Observer("listeDemandesAbsenceAValiderUpdated")
      public void loadListeDemandesAbsenceAValider() 
      {
          this.listeDemandesAbsenceAValider = getServiceAbsence().listerDemandesAbsenceAValider(this.actor.getId());
      }
      



      A method which raise the event to refresh the data model :



      public void choisirTransitionTache(Long taskId, String transition)
      throws java.lang.Exception
      {
          this.processHandler.followTransition(taskId, transition);
          this.events.raiseEvent("listeDemandesAbsenceAValiderUpdated");
      }
      



      And part of the facelet :


      <h:outputText value="#{messages['label.validationDemandesAbsence.empty']}" rendered="#{empty listeDemandesAbsenceAValider}"/>
      <rich:dataTable value="#{listeDemandesAbsenceAValider}" var="task" rendered="#{not empty listeDemandesAbsenceAValider}">
      <rich:column>
           <a4j:commandLink
                id="cmdDetail" 
                value="#{task.descriptionTache}" 
                action="#{validationDemandesAbsenceAction.detailDemandeAbsence(task.demandeAbsence)}" 
                reRender="wrapperDetailDemandeAbsence"
                oncomplete="Richfaces.showModalPanel('panelDetailDemandeAbsence')" />
      </rich:column>
      <rich:column>
           <h:outputText value="#{task.demandeAbsence.dateDemande}">
                <s:convertDateTime type="date"/>
           </h:outputText>
      </rich:column>
      <rich:column>
           <s:button value="#{messages['label.demandeAbsence.accepter']}" action="#{validationDemandesAbsenceAction.choisirTransitionTache(task.idTache, 'ok')}"  />
           <s:button value="#{messages['label.demandeAbsence.refuser']}" action="#{validationDemandesAbsenceAction.choisirTransitionTache(task.idTache, 'nok')}"  />
      </rich:column>
      </rich:dataTable>
      



      It works well the first time. But when I call the method firing the refresh event, the empty operator always returns false while the list is empty (rowcount = 0 when I look at it in debug page). Same problem if the data model is a List. But if I stop using @DataModel and use @Out instead, no more problems ! So I think this is really a problem with @DataModel annotation.


      Anyone has an idea what this problem comes from ?