23

Primefaces3.2とJSF2.0を使用しています

私のシナリオでは、フォームにファイルの日付、最終日、次の日付があります。ユーザーがファイルの日付を入力するとき、Beanのファイルの日付の値を更新する必要があります。これにより、その値を属性マインドの最終日の最小日付として使用できるようになり、次の日付の選択で使用できるようになります。

私の知識によると、値の変更リスナーはフォームの送信時に実行できるため、使用できません。私は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");
}

ここで私が間違っていることを教えてもらえますか?

4

6 に答える 6

40

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())));
}

古いプライムフェイスのバージョンでは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");
}
于 2012-12-31T09:46:11.533 に答える
18

p:ajax に更新を追加する必要があります。日付ピッカーで日付を選択するとき、およびフィールドに手動で入力するときに問題が発生しました。変更イベントは両方の方法でトリガーされませんでした。したがって、異なるイベントで p:ajax と af: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");
}

お役に立てれば

于 2012-12-31T09:49:29.940 に答える
1

私の解決策:

<p:ajax event="change" listener="#{caseUitility.dateChange}"/>

そして豆で:

public void dateChange(SelectEvent event) 
{   
      date = (Date)event.getObject();
}
于 2014-09-24T16:06:38.170 に答える
0

これを行うことを検討する必要があると思います:

<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 でトリガーされます。

于 2013-11-08T19:40:24.603 に答える