Primefaces p:calendrier avec p:ajax valeur non mises à jour (une étape de retard)

Je veux appeler un bean après une date est sélectionnée dans un p:calendar. Dans ma configuration j'ai un @Named @ViewScoped Bean, la classe ObWithDate est un @Entity avec un champ de date validFrom.

<h:form id="fUser">
  <p:dataTable id="dt" var="cum" value="#{myBean.listObWithDates}">
    <p:column>
      <p:calendar id="cValidFrom" value="#{cum.validFrom}">  
        <p:ajax event="dateSelect" listener="#{myBean.update(cum)}"
                update=":fUser:dt"/>  
      </p:calendar>  
    </p:column>
  </p:dataTable>
</h:form>

La bonne chose est, que la méthode d'haricot update(ObWithDate myO) est appelée avec le bon objet à chaque fois que je sélectionne une date. La mauvaise chose est que myO.validFrom n'a pas la bonne valeur. C'est toujours un pas derrière:

  • Champ initialisé avec 2012-01-01
  • GUI changement de 2012-01-05, haricot méthode débogue à 2012-01-01
  • GUI changement de 2012-01-15, haricot méthode débogue à 2012-01-05

Ce problème me rend fou, j'ai trouvé plusieurs problèmes avec pas correctement les valeurs mises à jour et aussi un peu sur p:calendar. La plupart d'entre eux suggèrent d'utiliser l'attribut selectListener="#{calendarBean.handleDateSelect}" avec un handleDateSelect(DateSelectEvent event) méthode. Mais je veux appeler ma méthode, car je veux passer l'instance courante de la variable.

  • Firebug de vérifier que la mise à jour correcte des valeurs sont transmises dans un message de demande de
  • Je suis l'aide de Primefaces 3.2 et JBoss-7.1.1-Finale
  • Même sans le p:dataTable, et en utilisant uniquement p:calendar le problème est toujours le même.
  • La mal valeur de la sortie de débogage peut être observée pour la méthode de l'Objet- update(ObWithDate myO) aussi bien pour l'entrée correspondante dans myBean.listObWithDates.
  • <p:ajax immediate="true" .../> ne permet pas de résoudre ce problème.

Mise à jour MattHandy m'a beaucoup aidé, la question Comment correspondant à l'élément de liste dans de l'appel ajax à l'intérieur de la haricots méthode? est formulé dans le cadre du suivi JSF p:calendrier p:dataTable: Comment obtenir la ligne de p:ajax dateSelect événement.

  • Notez que @Named et @ViewScoped ne travaillent pas ensemble. CDI ne connaissent pas la portée de vue. Peut-être que ce n'est pas la raison de votre problème concret, mais peut provoquer un comportement indésirable, maintenant ou plus tard.
  • Je suis l'aide de Couture, qui améliore CDI avec cette portée (docs.jboss.org/seam/3/faces/latest/reference/en-US/html/...), cela fonctionne comme un charme sur plusieurs pages. C'est un pas en arrière, pas un seul jour de retard. - Je mettre à jour la question pour clarifier cela.
  • Ce doit être un cycle de vie en question. La méthode setter est appelé avant l'auditeur exécute. Et l'auditeur définit la valeur de revenir à la valeur précédente.
  • Oui, mais comment le résoudre? J'ai aussi essayé p:ajax immediate="true"sans succès.
  • J'ai eu le même problème avec datatable et calendar - utilisé pour le filtrage. Essayez d'ajouter widgetVar à votre datatable et appel ajax comme ceci : <p:ajax event="dateSelect" update=":frmTable:idTable" oncomplete="tableWidgetVar.filter()"/> . Bien que j'ai mis à jour la table avec update j'avais besoin de forcer la mise à jour une fois de plus au - dessus du cycle de vie des problème. OMI, vous devez forcer la mise à jour une fois de plus trop.
InformationsquelleAutor Thor | 2012-04-16