31 Ekim 2013 Perşembe

Primefaces Growl Not Rendered After Update

I continue forwarding my experiences on primefaces. Today I've had another issue and finally got the solution.

If you are using primefaces growl component to show messages after a process, you have to add a FacesMessage to FacesContext and update the component or set globalOnly attribute true. Ordinarily, growl must show up and show your test you put in FacesMessage. In my project, I push a primefaces command button that has an actionListener, I do things in server side, put my FacesMessage to the context and update my components in UI. But the growl does not show up. I've searched for the problem and finally say my mistake got the solution.

Here is my problematic code:
<h:form id="formNewF">

  <p:dialog widgetVar="dlgNewF" dynamic="true">
    <p:ajax event="close" listener="#{myController.closeF()}" update="formNewF"/>
    
    <p:panelGrid columns="3" id="newFPanel">
      <h:outputLabel for="fName" value="FName" /> 
      <p:inputText id="fName" value="#{myController.newF.name}" /> 
      <p:message id="fNameMessage" for="fName" display="text" />  
      <p:column/>
      <p:commandButton value="Save" update="newFPanel, dataTable" action="#{myController.saveF()}" oncomplete="if(!args.validationFailed){dlgNewF.hide();}"/> 
      <p:column/>
    </p:panelGrid>
  </p:dialog>

</h:form>

As you can see, I execute my saveF method. In that method, I put my FacesMessage to context. Here the problem comes. When I return to xhtml the code updates dataTable but the code in my oncomplete event triggers an ajax event which means that we have to go to the server side again. Remember, these are all happening before rendering the xhtml. So my second request to server side overrides the previous context or creates a new one and deletes my FacesMessage. This is the reason why growl does not render.

As a summary, more than one request to server side before rendering the view causes disappearing your FacesMessage and the growl does not render. You can solve this problem by removig the second request or doing the job in one server side request.

( primefaces, jsf, growl, facesmessage, facescontext, rendering, twice, not shown )

28 Ekim 2013 Pazartesi

Cehennem (Inferno) - Dan Brown


Kitabı çıktığı gün almıştım fakat okumak ve inceleme yazmak bu zamana kadar kaldı ne yazık ki. Şimdi düşünüyorum da keşke hemen okusaymışım. Uzun bir kitap okumama döneminden sonra bu kitap ilaç gibi geldi diyebilirim.

Kitap, daha ilk 10 sayfada kendine bağımlı yapmaya başlıyor insanı. Dan Brown'un tarzı, insanı çok fazla boğmayan, kısmen basit olan betimlemeleri ile oldukça kolay anlaşılır oluyor. Beğendiğim bir diğer husus ise roman içerisindeki hikaye sayısını sınırlı tutması. Yani 10 tane ayrı hikaye ile başlayıp kitabın sonunu bağlayamama gibi bir durum olmuyor. Akış ve takip edilebilme durumu, önceki kitaplarındakinde de daha iyi olmuş diyebilirim.

Gelelim konuya. Belki konuların çok ilgimi çekmesinden dolayı, ya da çok tutulan konuları seçmesinden dolayı Dan Brown'un kitaplarını merak içerisinde okuyorsunuz. Bu kitapta, insanı merakta bırakan en önemli unsur kuşkusuz ki Dante olmuş. Dante ile ilgili, fazlaca paralar saçılarak yapılacak bir reklam kampanyası bile bu kadar tutmazdı eminim. Kitabın çeşitli yerlerinde bir çok kez kendisine, yaşamına, siyasi görüşüne, eserlerine değinilmiş ve bir çok detay verilmiş. Bu kitap sonrası, hiç alakası olmayan insanların bile merak edip İlahi Komedya'yı okuyacağından eminim. Kitapta bahsi geçen eserler, belli ki çok büyük bir bilgi birikimi, çalışma ve ekip çalışması ile incelenmiş. Dan Brown'ın ve etrafındaki yardımcı insanların gerçekten de inanılmaz bir bilgi birikimine sahip olduğu söylenebilir. Mekanları ve eserleri öylesine güzel işlemişler ki, kitap okurken bir kaç kez durup Google'a araştırma gereği duydum. Müzelerde gezdiğinizde yanından geçip "güzel çizilmiş" dediğiniz eserlerin altındaki anlam, kimin için, ne amaçla yapıldığı gibi bilgileri öğrendikçe yeniden yeniden incelemek istiyorsunuz eserleri.

Kitabın geçtiği mekanlara bakacak olursak, Dan Brown'ın uzmanlık alanı olan Floransa, Venedik ve az da olsa İstanbul işlenmiş. İtalya'yı ve Floransa'yı daha önce gezmiş bir insan olarak keşke bu kitap bir kaç sene önce çıksaydı da, o eserlere daha fazla bilgi ve merak sahibi olarak baksaydım diyorum. Hikayenin geçtiği mekanlardaki gizli geçitler, çoğu kişinin dikkat etmeyeceği ufak detaylar, bundan sonra özellikle Floransa'yı gezecek insanlar için incelenecek yerler oldu artık. Gelelim İstanbul'a. Diğer şehirlerden biraz daha az değinilmiş olsa da özellikle Tarihi Yarımada ile ilgili güzel tespitler mevcut. Yabancı birileri tarafından her işlendiğindeki o fesli, sarıklı, Arabistan'a benzetilen İstanbul bu sefer daha doğru tespitlerle, ön yargılardan uzak, gerçekten de olduğu gibi işlenmiş. Yalnız bildiğiniz tanıdığınız yerlerin kitapta işlenmesinin şöyle bir dezavantajı var; konudan sapıp mekanların nasıl tanıtılmış onu takip ediyorsunuz bu sefer. Bir de neresi olduğunun merak edildiği yerler var ki biz bildiğimiz için bunları hemen tahmin edebiliyoruz ve heyecanı kalmıyor :) Bir diğer nokta ise, herkesin bir çok gezip gördüğü tarihi eserlerimiz ile ilgili bilmediğimiz detay bilgileri edinebiliyoruz kitaptan.

Senaryoya gelirsek. Akıcı ve insanı sürükleyen bir konu var yine ortada. Önceki kitaplardaki gibi belli bir amaç doğrultusunda tarih içerisinde yolculuk ediyor ve bir takım gizemler çözmeye çalışıyoruz. Hikaye ilerlerken tarihi mekanlar ve detayları ile birlikte, günümüze ait teknolojik gelişmelerden bahsedilmesi, kitapta biraz da bizden birşeyler bulmayı sağlıyor. Özellikte polisiye seven insanlar için kitapta Dan Brown'ın, kim olduğunu merak ettiğimiz karakterler arasında bir ters köşe yapması var ki dillere destan:) Fakat ne yazık ki -spoiler- Robert Langdon'ın hafızasını kaybetmesi sonrası gerçeklerin anlatıldığı esnadaki kurgu çok yavan ve basit kalmış. Truman Show tarzındaki 'Her şey bir senaryoydu' yaklaşımı bende, bir film izleyip sonrasında herşeyin rüya olmasının bıraktığı etkiyi bıraktı. Burası için daha iyi bir kurgu yapılabilirmiş bence -spoiler sonu-

İşten güçten ötürü kitabı tek seferde okuyamadım ne yazık ki fakat bir pazar günü sabahtan başlanıp bir solukta okunacak bir kitap olmuş diyebilirim. Dan Brown'ın yeni kitaplarını dört gözle bekliyor olacağım.

( dan brown, inferno, cehennem, dante, ilahi komedya, cennet, araf, istanbul, venedik, floaransa )