J'utilise primefaces 3.2 et JSF 2.0
Mon scénario est que j'ai la date de fichier, la dernière date et la date suivante dans mon formulaire . Lorsque l'utilisateur saisit la date du fichier, je dois mettre à jour la valeur de la date du fichier dans le bean afin qu'elle puisse être utilisée comme date minimale dans la dernière date d'attribut mindate et donc dans la prochaine sélection de date.
Selon mes connaissances, l'auditeur de changement de valeur peut s'exécuter lors de la soumission du formulaire, donc je ne peux pas l'utiliser. J'ai utilisé p: ajax . Mais je ne parviens toujours pas à définir la date du fichier. Comme la date du fichier n'est pas définie, l'utilisateur peut sélectionner la dernière date et la date la plus proche de la date du fichier.
caseMaster.xhtml
<p:calendar value="#{caseUitility.caseMaster.fileDate}" id="fileDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true">
<p:ajax event="change" listener="#{caseUitility.dateChange}"/>
</p:calendar>
<p:calendar value="#{caseUitility.caseMaster.lastDate}" required="true" id="lastDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true" mindate="#{caseUitility.caseMaster.fileDate}" >
</p:calendar>
CaseUitility.Java
public void dateChange(ActionEvent ae) {
System.out.println("File Date: " + caseMaster.getFileDate());
System.out.println("Hello... I am in DateChange");
}
est-ce que n'importe qui peut me guider ce que je fais mal ici?
Dans les versions plus récentes de PrimeFaces,SelectEvent
devrait être utilisévoir l'extrait de code suivant
<p:calendar id="event" value="#{calendarView.date4}">
<p:ajax event="dateSelect" listener="#{calendarView.onDateSelect}" update="msgs" />
</p:calendar>
public void onDateSelect(SelectEvent event) {
FacesContext facesContext = FacesContext.getCurrentInstance();
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Date Selected", format.format(event.getObject())));
}
Dans les versions précédentes de primefaces, utilisezDateSelectEvent
<p:ajax event="dateSelect" listener="#{caseUitility.dateChange}"/>
public void dateChange(DateSelectEvent event) {
Date date = event.getDate();
System.out.println("File Date: " + date);
System.out.println("Hello... I am in DateChange");
}
Vous devriez ajouter une mise à jour à votre p: ajax. J'ai eu des problèmes lors de la sélection d'une date avec le datepicker et lors de la saisie manuelle dans le champ. L'événement de changement n'a pas été déclenché dans les deux sens. J'ai donc utilisé un p: ajax et un f: ajax avec différents événements.
<p:calendar value="#{caseUitility.caseMaster.fileDate}" id="fileDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true">
<p:ajax event="dateSelect" listener="#{caseUitility.dateSelect}" update="lastDate"/>
<f:ajax event="change" execute="@this" render="lastDate" listener="#{caseUitility.dateChange}"/>
</p:calendar>
Et dans la fève
public void dateSelect(DateSelectEvent event) {
caseMaster.setFileDate(event.getDate());
System.out.println("File Date: " + caseMaster.getFileDate());
System.out.println("Hello... I am in DateChange");
}
public void dateChange(AjaxBehaviorEvent event) throws MWSException {
System.out.println("File Date: " + caseMaster.getFileDate());
System.out.println("Hello... I am in DateChange");
}
J'espère que cela t'aides
Ma solution:
<p:ajax event="change" listener="#{caseUitility.dateChange}"/>
Et dans la fève:
public void dateChange(SelectEvent event)
{
date = (Date)event.getObject();
}
Utiliser un événement ajax comme dateSelectlike
<p:calendar value="#{caseUitility.caseMaster.fileDate}" id="fileDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true">
<p:ajax event="dateSelect" process="@this" update="lastDate" listener="#{caseUitility.dateChange}"/>
</p:calendar>
<p:calendar value="#{caseUitility.caseMaster.lastDate}" required="true" id="lastDate" effect="fadeIn" pattern="dd/MM/yyyy" readOnlyInputText="true" mindate="#{caseUitility.caseMaster.fileDate}" >
</p:calendar>
Auditeur,
public void dateChange(SelectEvent event) {
System.out.println("File Date: " + (Date) event.getObject());
System.out.println("Hello... I am in DateChange");
}
mais gardez à l'esprit que, vous ne devez utiliser aucun autre identifiant de composant dans le processus (signifie que @ n'est pas autorisé dans le processus), sinon l'écouteur ne fonctionnera pas.
Je pense que vous devez envisager de faire ceci:
<p:calendar id="fileDate" value="#{caseUitility.caseMaster.fileDate}" navigator="true" effect="slideDown" mindate="#{caseUitility.today}" readOnlyInputText="true" pattern="dd/MM/yyyy HH:mm" required="true" showOn="button" autocomplete="false">
<p:ajax event="focus" listener="#{caseUitility.dateChange}" update="lastDate" />
</p:calendar>
public void dateChange() {
System.out.println("File Date: " + caseMaster.getFileDate());
}
Si vous utilisez l'événement "focus", il sera déclenché lors d'un changement ou par dateSelect pour le contrôle du calendrier principal.
Vous pouvez utiliser onstart
et oncomplete
(n'apparaît pas dans la doc de primefaces).
J'ai résolu avec ça:
<p:calendar
id="fromDate"
value="#{reportBean.fromDate}"
pattern="dd/MM/yyyy"
locale="es"
maxdate="#{reportBean.untilDate}">
<p:ajax event="dateSelect"
onstart="openModal();"
oncomplete="closeModal();"
update="untilDate div_report"/>
</p:calendar>
Javascript:
function openModal(){
$('#mdlLoading').modal('open');
}
function closeModal(){
$('#mdlLoading').modal('close');
}
J'espère que cela aidera quelqu'un!