programing

값 변경 수신기가 프라임페이스 일정관리에서 작동하지 않습니다.

css3 2023. 10. 2. 15:21

값 변경 수신기가 프라임페이스 일정관리에서 작동하지 않습니다.

저는 프라임페이스 3.2와 JSF 2.0을 사용하고 있습니다.

제 시나리오는 제 양식에 파일 날짜, 마지막 날짜, 그리고 다음 날짜가 있는 것입니다.사용자가 파일 날짜를 입력하면 해당 값을 속성 mindate의 마지막 날짜에 최소 날짜로 사용할 수 있도록 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>

CaseUtility.java

public void dateChange(ActionEvent ae) {
    System.out.println("File Date: " + caseMaster.getFileDate());
    System.out.println("Hello... I am in DateChange");
}

내가 여기서 무엇을 잘못하고 있는지 안내해 줄 수 있습니까?

PrimeFaces의 최신 버전에서는 다음 코드 스니펫을 참조하십시오.

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

이전 프라임페이스 버전에서는 다음을 사용합니다.

<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}"/>

그리고 빈속에서:

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

이 일을 생각해 보셔야 할 것 같습니다.

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

포커스 이벤트를 사용하는 경우 변경 또는 날짜 변경 시 트리거됩니다. 캘린더 프라임페이스 제어에 대해 선택합니다.

ax 이벤트를 date로 사용좋아요를 선택합니다.

<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를 사용해서는 안 됩니다(프로세스 중에 means만 @this 허용됨). 그렇지 않으면 수신기가 작동하지 않습니다.

사용가능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>

자바스크립트:

function openModal(){
    $('#mdlLoading').modal('open');
}
function closeModal(){
    $('#mdlLoading').modal('close');
}

누군가에게 도움이 되길 바랍니다!

언급URL : https://stackoverflow.com/questions/14099478/value-change-listener-not-working-in-primefaces-calendar