Primefaces 3.2およびJSF 2.0を使用しています
私のシナリオでは、フォームにファイル日付、最終日付、および次の日付があります。ユーザーがファイルの日付を入力すると、Beanのファイルの日付値を更新する必要があります。そのため、その値は属性mindateの最終日などの次の日付選択で最小日付として使用できます。
私の知識値の変更により、リスナーはフォームの送信時に実行できるため、使用できません。 p:ajaxを使用しました。それでも、ファイルの日付を設定することはできません。ファイルの日付が設定されていないため、ユーザーはファイルの日付の前の最終日と次の日付を選択できます。
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");
}
ここで私が間違っていることを教えてもらえますか?
PrimeFacesのより新しいバージョンでは、SelectEvent
を使用する必要があります。次のコードスニペットを参照してください。
<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())));
}
古いprimefacesバージョンでは、DateSelectEvent
を使用します
<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");
}
P:ajaxに更新を追加する必要があります。日付ピッカーで日付を選択するとき、およびフィールドに手動で入力するときに問題が発生しました。変更イベントは、両方の方法でトリガーされませんでした。したがって、異なるイベントでp:ajaxとf:ajaxを使用しました。
<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>
そして、豆の中
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");
}
お役に立てれば
私の解決策:
<p:ajax event="change" listener="#{caseUitility.dateChange}"/>
そして、Beanで:
public void dateChange(SelectEvent event)
{
date = (Date)event.getObject();
}
DateSelectとしてajaxイベントを使用する
<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>
リスナー、
public void dateChange(SelectEvent event) {
System.out.println("File Date: " + (Date) event.getObject());
System.out.println("Hello... I am in DateChange");
}
ただし、プロセスで他のコンポーネントIDを使用しないでください(プロセスで@thisのみが許可されていることを意味します)。そうしないと、リスナーが機能しません。
これを行うことを検討する必要があると思います:
<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());
}
「フォーカス」イベントを使用する場合、カレンダープライムフェイスコントロールの変更またはdateSelectでトリガーされます。
onstart
およびoncomplete
を使用できます(primefaces docには表示されません)。
私はそれで解決しました:
<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');
}
これが誰かを助けることを願っています!