primefaces - p:कैलेंडर मान तारीख के साथ अद्यतन नहीं है




calendar (5)

आप यह गलत तरीके से कर रहे हैं, जटिल करने के लिए

यहाँ एक नज़र डालें:

        <p:calendar value="#{ivkDaten.beginn}" locale="de" lang="de"
            pattern="dd.MM.yyyy" label="#{messages['services.ivk.beginn']}:" 
            width="80" id="ivkbeginn" effect="fadeIn" readonlyInput="true" disabled="true"
            showOn="button" mindate="#{services.minDate}" maxdate="#{services.maxDate}">

            <p:ajax event="dateSelect" listener="#{ivkDaten.recalcDate()}"
                update="ablauf" />
        </p:calendar>

आपको "reclacDate()" लिए गेटर / सेटर सेट करने की आवश्यकता है और जब आप "reclacDate()" कॉल करते हैं तो आप "reclacDate()" प्रयोग कर सकते हैं और मुझे पूरा यकीन है कि आपके पास नई तारीख होगी।

मुझे एपी: कैलेंडर घटक एपी मिल गया है: संवाद एक। जब संवाद दिखाया जाता है कि यह वापस की बीन में संपत्ति से इसकी कीमत लेता है, लेकिन जब एक नई तारीख चुने जाती है, तो चयनकर्ता श्रोता को पहुंचे पुराने मान लाता है और नयी चुनी तारीख नहीं। अगले कोड में क्या गलत है?

   <p:dialog id="eventDialog" widgetVar="eventDialog" header="#{textos.confirmarFechaHora}" showEffect="clip" 
         hideEffect="clip" modal="true"
         appendToBody="true"> <!-- A false, no entran los eventos tras modificar la fecha/hora del calendario --> 
  <h:panelGrid id="eventDetails" columns="2">  
     <h:outputLabel for="calHora" value="#{textos.horaComienzo}" />  
     <p:calendar id="calHora" locale="es" pattern="dd/MM/yyyy HH:mm" 
                 value="#{schedulePFController.fechaComienzo}" mode="inline"
                 required="true"
                 accesskey="true" valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}">
        <p:ajax event="dateSelect" listener="#{schedulePFController.cambiaHoraComienzo}"/>
     </p:calendar>
     <p:commandButton value="#{textos.cancelar}" oncomplete="eventDialog.hide();"/>  
     <p:commandButton value="#{textos.mostrarCitas}" 
                      action="#{schedulePFController.verEntradaCalendario}" 
                      rendered="#{schedulePFController.clickedOnCita}"/>
     <p:commandButton value="#{textos.addCita}" 
                      action="#{schedulePFController.addCita}" 
                      rendered="#{!schedulePFController.clickedOnCita}"/>
  </h:panelGrid>

public void cambiaHoraComienzo(SelectEvent ev) {
  Date date = (Date)ev.getObject();
  fechaComienzo = date;
  horaComienzo = new DateCita(date);
  logger.debug("Cambiando fechaComienzo "+horaComienzo.toString()+" +++++++++++++++++++++++++++++++++++++++++");}

यह प्राइमफैसेस के पुराने संस्करणों के साथ एक समस्या है। इसे प्राइमफॉसेस 3.3 या 3.3.1 में तय किया गया है। किसी नए संस्करण में अपग्रेड करने का प्रयास करें


यह p:calendar एक h:form अंदर है h:form ?

हमारे पास एक ही समस्या थी और हमने ध्यान दिया कि हम इसे भूल गए थे


मुझे पता नहीं है कि आप valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}" p:calender में क्यों उपयोग कर रहे हैं p:calender जब आप पहले से ही अपने एजेक्स कॉल में एक सूची बनाने वाले हैं
बस अपने p:calender valueChangeListener="#{schedulePFController.cambiaHoraComienzoVCL}" को हटा दें p:calender और फिर check.listener listener="#{schedulePFController.cambiaHoraComienzo}" जो आप p:ajax में उपयोग कर रहे हैं p:ajax टैग पर्याप्त है


प्रस्तावना:

मैं जेएसएफ के साथ काम नहीं करता, लेकिन कुछ ऐसी चीजें हैं जो आपको वापस ले जा सकती हैं जहां आप बनना चाहते हैं:

ए) एक मानक कैलेंडर में दिनांक दिनांक के दिनांक भाग के साथ काम करते समय , उपयोग करने पर विचार करें:

someCalendar.set(Calendar.MILLISECOND, 0)

बी) joda-time का उपयोग करने पर विचार करें, क्योंकि यह कई स्थितियों में शुद्धता, प्रदर्शन और उपयोग में आसानी के लिए मानक पुस्तकालय पर अक्सर अनुशंसित ( here , here , और कई अन्य स्थानों ) की सिफारिश की जाती है।

सी) सुनिश्चित करें कि आपका बीन स्कोप प्रत्येक AJAX कॉल (रीडायरेक्ट नहीं कर रहा है, केवल मानक पोस्ट-बैक भेज रहा है, आदि) और प्रत्येक इवेंट हैंडलर चेहरे का संदर्भ प्राप्त कर रहा है (उदाहरण के लिए। FacesContext facesContext = FacesContext.getCurrentInstance(); )

डी) mindate और संभवतः आप की तरह काम नहीं करते हैं, और मुझे उम्मीद नहीं है कि स्वचालित व्यवहार को आसानी से mindate जा सकता है।

जब वे विकल्प उपलब्ध नहीं होते हैं, और आपको अपने पास यह सब कुछ करना है जो आपके पास है:

फिलिसॉफिकल / यूएक्स: पहली चीज जो मैं करूँगा वह तारीखों की जोड़ी से व्यवस्था या परिप्रेक्ष्य की अपेक्षा को हटा देती है। जोड़ी को एक वेक्टर के रूप में न करें जो टाइमलाइन पर एक दिशा का खुलासा करता है या उम्मीद करता है।

  • दूसरे शब्दों में, start या तिथि से पहले या उससे पहले की तारीख से पहले या उससे पहले की तारीख है? नहीं, जैसा कि ऐतिहासिक डेटा की एक क्वेरी के लिए देखा जा सकता है, या उन घटनाओं में सुधार लागू करने के लिए जो अभी तक हो चुके हैं या पहले ही हो चुके हैं?

    यह अर्थ आसानी से उपयोगकर्ता को भ्रमित कर सकता है कि वे 'वापस' या 'आगे से' जा रहे हैं (और आसानी से स्वयं को भ्रमित कर सकते हैं)। इसके बजाय मैं तारीखों की एक जोड़ी के साथ उनके बीच की अवधि के साथ व्यवहार करता हूं, बस a pair of dates या range या एक period जो एक अंतराल घोषित करता है, और किसी भी परिणामी चुने हुए मूल्यों के आधार पर समय रेखा पर उनकी सापेक्ष स्थिति का अनुमान लगाता है । इस तरह आप संबंधित और अंतर्निहित आवश्यकताओं का सम्मान कर सकते हैं कि तिथियां कभी बराबर नहीं होतीं, और बाएं हमेशा बाईं ओर होती है, दाईं ओर दाईं ओर सही होती है।

हम अनुमान लगा सकते हैं कि 'शुरू' या 'से' का अर्थ क्या है, लेकिन हम कुछ अर्थ और सापेक्ष रिश्ते का अनुमान लगा सकते हैं: एक दाएं, बाएं, और एक कालक्रम संबंधी समय रेखा के बीच। नोट: किसी भी गणना या तुलना करने से पहले हमेशा यूटीसी की तारीखों को हल करें।

long oneDateValue = oneDate.toUtc().toMilliseconds();
long anotherDateValue = anotherDate.toUtc().toMilliseconds();

long right = max (oneDateValue, anotherDateValue);
long left = min (oneDateValue, anotherDateValue);

प्रेसिजन का मूल्यांकन: दूसरी बात यह है कि किसी भी भाषा में कई तारीखों के साथ काम करते समय मैं फ्लोटिंग पॉइंट नंबरों से कैसे निपट सकता हूं। तुलना के लिए, समानता की तुलना न करें, बल्कि डेल्टा की तुलना "स्वीकार्य त्रुटि स्तर" से करें। दूसरे शब्दों में, आवेदन वास्तव में केवल कुछ निश्चित परिशुद्धता से संबंधित है, इसलिए सुनिश्चित करें कि केवल उस परिशुद्धता पर कब्जा कर लिया गया है और माना जाता है:

const int dateTimeResolutionInMs = 86400000; // milliseconds per day

public bool areEssentiallySame(long left, long right) {

   // the difference between right and left is less than our precision 
   // requires, thus dates are effectively the same
   return (right - left < dateTimeResolutionInMs);
}

कोयरिंग प्रेसिजन: तीसरा, संकल्प की सीमा के भीतर भी हम मूल्यों में अंतर को कैसे हल कर सकते हैं? (आउट एप्लिकेशन को संभालने या अपेक्षा करने या जरूरतों की तुलना में अधिक सटीकता दी गई थी)।

long diff = value % dateTimeResolutionInMs;

  1. छंटनी: return value - diff;

  2. निकटतम (डब्ल्यू / पूर्वाग्रह): return value + (diff < dateTimeResolutionInMs/ 2) ? -1 * diff : dateTimeResolutionInMs - diff; return value + (diff < dateTimeResolutionInMs/ 2) ? -1 * diff : dateTimeResolutionInMs - diff;

  3. अन्य: किसी भी मूल्य को किसी भी संकल्प या परिशुद्धता में कम करने या विस्तार करने के लिए कई अन्य रणनीतियां हैं

अनुपूरक: जहां तक ​​पोस्ट-बैक / अजाक्स कॉल को calendar तत्व द्वारा निकाली गई घटनाओं के लिए आपके द्वारा अपेक्षित मानों के साथ एक दृश्य वापस करने के लिए कॉल किया जाता है, तो आप उस चिंता को एक नए प्रश्न पर अलग करना चाहेंगे यदि प्रस्तावना में नोट ' आपको कहीं भी नहीं मिलते हैं, और आप निश्चित रूप से जानते हैं कि आपकी बीन ठीक से पंजीकृत और मान्यता प्राप्त है। आपके पास कुछ ब्राउज़र / ब्राउज़र-संस्करण विशिष्ट समस्याएं हो सकती हैं जो अवांछित व्यवहार में योगदान देती हैं, और किसी और चीज की तरह, ज्ञात और अज्ञात दोनों मुद्दे हैं।