開始日と終了日を選択するために、2つのカレンダーコンポーネントでページを変更しています。私はそれらのいずれかを修正するたびに開始日が終了日の前であることをチェックさせるはずです。開始が終了またはそれ以降に設定されている場合、コードによって終了日が最大日付に変更され、警告がポップされます。Ajaxイベントの変更後にPrimefacesカレンダーを更新するにはどうすれば新しい値が検証されますか?
イベントリスナーは正常に実行されますが、終了日カレンダーは新しい値を反映するために更新されません。リスナーが値を変更する前に更新されるわけではありません.-それはまったく更新できません。
プロジェクトは、Primeface 5.3とJava 1.6で動作します。これは、XHTML(マイナス可読性のスタイル)です:
<p:outputPanel id="fl83">
<p:outputPanel id="fl83c3">
<h:outputLabel value="Start date" for="fechaInicioMP" />
<p:calendar locale="es" pattern="dd/MM/yyyy" id="fechaInicioMP"
maxdate="#{filtroFechasBB.fechaMaxFin}" value="#{filtroFechasBB.fechaInicio}"
onSelectUpdate=":f183" >
<p:ajax event="blur" />
<f:ajax event="change" listener="#{filtroFechasBB.fechaInicioTextChange}"
render="@this" update="@form" />
<p:ajax event="dateSelect" listener="#{filtroFechasBB.fechaInicioClickChange}"
update="@form" />
</p:calendar>
</p:outputPanel>
<p:outputPanel id="fl83c4">
<h:outputLabel value="End date" for="fechaFinMP" />
<p:calendar locale="es" pattern="dd/MM/yyyy" id="fechaFinMP"
maxdate="#{filtroFechasBB.fechaMaxFin}" value="#{filtroFechasBB.fechaFin}"
onSelectUpdate=":f183" >
<p:ajax event="blur" />
<f:ajax event="change" listener="#{filtroFechasBB.fechaFinTextChange}"
render="@this" update=":fl83" />
<p:ajax event="dateSelect" listener="#{filtroFechasBB.fechaFinClickChange}"
update=":fl83" />
</p:calendar>
</p:outputPanel>
</p:outputPanel>
そして、これらのリスナーです:
public void fechaFinTextChange() {
if(fechaFin.after(fechaMaxFin)) {
fechaFin = fechaMaxFin;
addErrorMessage(FFIN_AFTER_FMAX);
}
compareInicioBeforeFin();
}
public void fechaFinClickChange(SelectEvent event) {
setFechaFin((Date)event.getObject()); // I couldn't find out why this is here given that
// the setter has already been called
compareInicioBeforeFin();
if (updateMetodoEntreBB != null) {
ajaxActualiza(event, OpcionesAjax.F_FIN);
}
}
// fechaInicioTextChange and fechaInicioClickChange do pretty much the same as these two
private void compareInicioBeforeFin() {
if(fechaInicio.after(fechaFin)) {
fechaFin = fechaMaxFin;
addErrorMessage(FINI_AFTER_FFIN);
}
}
あなたはをクリックすると、JSFの変更イベントがトリガされませんので、2つのAjaxのイベントがあります。カレンダーとPrimeFaces dateSelectは、日付を入力するときにトリガーされません。
カレンダーからのonSelectUpdateと、両方のajaxイベントからのレンダリングと更新を@this、@form、end日付カレンダーのID、両方のカレンダーID、カレンダーのID outputPanelのIDと共通のoutputPanelのID、気になるカレンダーだけです。更新されません。
私は賢明なところですが、私のGoogle Fuはどちらの解決策も見つけられません。
試してみましたが、endDateをnullに設定しても、p:calendarコンポーネントをリフレッシュするのに役立ちません。表示されている最後の値が表示されます。 –