2013-07-14 23 views
6

this sorunu nedeniyle kullanıcıların yalnızca takvimden bir tarih seçebilmeleri için <p:calendar> numarasını hazırlayacağım (bu bir çözüm değil).Bir p: takvim readonly

bu yüzden olabilmesi için this cevap gibi bahsettiği gibi ben

<p:calendar id="calendarId" 
     value="#{bean.property}" 
     converter="#{jodaTimeConverter}" 
     pattern="dd-MMM-yyyy hh:mm:ss a" 
     showOn="button" 
     readonly="#{facesContext.renderResponse}" 
     effect="slideDown" 
     required="true" 
     showButtonPanel="true" 
     navigator="true"/> 

Bu işler, readonly="#{facesContext.renderResponse}" yapıyorum ama sayfa yüklendiğinde (adres çubuğuna URL yazarak ve enter tuşuna basarak anahtar), facesContext.renderResponse, false döndürür ve takvim artık salt okunur değildir. <p:commandButton> tuşlarına basarak formu gönderdiğimde true olarak değerlendirir.

Peki, sayfa yüklendiğinde takvimi nasıl hazırlanır?

P.S: PrimeFaces 3.5 ve Mojarra 2.1.9 kullanıyorum.

cevap

11

JSF 2.0'den beri davranış gerçekten değişti. FacesContext#getRenderResponse() yalnızca FacesContext#renderResponse() çağrılmışsa true değerini döndürür. Önceden bu, her GET isteğinin geri yükleme görünümü aşamasında gerçekleşti. Ancak, <f:viewParam>'un tanıtılmasından bu yana, JSF, en az bir görünüm parametresi olduğunda artık bunu yapmayacaktır, sadece görünüm parametrelerini doğru bir şekilde işlemek için herhangi bir fazı atlamaksızın her bir fazı yürütmeye devam edecektir.

Sayfanızda bir var. Tamamen iyi, ama bir test olarak, onu kaldırmayı deneyin ve bir GET isteğinde de true döndürdüğünü göreceksiniz.

  1. yanı FacesContext#isPostback() kontrol edin:

    Etrafında almak için temelde 2 seçenek var. GET isteklerinde her zaman false değerini döndürür. FacesContext#getCurrentPhaseId() yerine

    readonly="#{not facesContext.postback or facesContext.renderResponse}" 
    
  2. kontrol edin. Sadece çirkin kodla (sihirli sayılar) sonuçlanırsınız.

    readonly="#{facesContext.currentPhaseId.ordinal eq 6}" 
    

    Eğer OmniFaces kullanıyorsanız, bunu daha az çirkin yapabiliriz.

    <o:importConstants type="javax.faces.event.PhaseId" /> 
    ... 
    readonly="#{facesContext.currentPhaseId eq PhaseId.RENDER_RESPONSE}" 
    
+0

bu çok güzel bir çözümdür :) –