web-dev-qa-db-ja.com

プライムフェイスカレンダーで値変更リスナーが機能しない

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

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

21
mrugeshthaker

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");
}
35
Daniel

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

お役に立てれば

18
roel

私の解決策:

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

そして、Beanで:

public void dateChange(SelectEvent event) 
{   
      date = (Date)event.getObject();
}
1
user3442685

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のみが許可されていることを意味します)。そうしないと、リスナーが機能しません。

0
Annu

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

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

0
Agurno

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

これが誰かを助けることを願っています!

0