Recently, I've been working on converting standard web application projects to Maven web application projects in Netbeans. During this process, I've faced a problem. In standard java or java web projects, you can reach a properties file in every location inside the project. I mean if you put your properties file (eg. messages.properties) in a package like com.test.myproject.resources, you can reach that properties file with ResourceBundle like:
ResourceBundle rb = ResourceBundle.getBundle("com.test.myproject.resources.messages");
When you convert your projects to maven projects, you cannot access resources like this. Maven has a unique directory hierarchy to follow. When you create a Maven project, you will see a directory hierarchy like:
PROJECT_NAME > src > main > java - resources - webapp - ...
You can find the whole hierarchy in https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
In this hierarchy, Maven forces you to put the related files to related folders. You should put web files to webapp folder, java files to java folder and resources to resource folder. If resource folder is not created automatically, you can generate one. After that, messages.properties file should be put into resources folder. Then, you can reach your properties file by using ResourceBundle like:
ResourceBundle rb = ResourceBundle.getBundle("messages");
Maven sees resources folder as a root folder for resources so you do not need to specify and package name. You can successfully use your properties file in Maven.
( resourcebundle, maven, directory hierarchy, properties )
11 Mart 2014 Salı
2 Mart 2014 Pazar
And The Oscar Goes To...
Eveeet, uzun bir süre sonra Oscar adayı oldukça film izlemiş olarak, ödül törenine saatler kala biraz yorum ve tahmin yapmak istedim. Yine de izlemediğim baya film olmasından ötürü her kategori hakkında bir şey diyemeyeceğim. Bakalım neler olacak.
Best Picture
Açıkçası en iyi film kategorisinde son yıllardaki en keyifli filmler seçilmiş diyebilirim. Hangi filmin alacağı oldukça belli fakat diğer filmler de oldukça etkileyiciydi. Gravity, özellikle IMAX'de izlendiğinde efsane bir filmdi benim için. Tom Hanks'in Cast Away'inden bu yana hemen hemen tek kişinin oynadığı en sürükleyici filmdi diyebilirim. The Wolf of Wall Street, pornografik görüntüler had safhada olsa da yine yılın iyi filmlerindendi. Di Caprio ve Scorsese ikilisi yine harika bir iş çıkarmış. American Hustle ise Christian Bale'in oyunculuğu, mekan ve kostümler dışında bence yılın en balon filmlerinden di. Bana biraz geçen seneki Silverlining's Playbook'un meyvelerini yemek istemişler gibi geldi. İlk yarısı sürükleyici denilebilirdi fakat film gereksiz uzundu. Benim bu yılki şahsi favorim ise Dallas Buyers Club. Konu gerçekten hiç beklenmedik bir yere gidiyor filmde. Oyunculuklar inanılmaz. Christian Bale'den sonra McConaughey'in de kilo verme başarısı muazzam. Filmin büyük kısmı ufak bir kasaba içerisinde geçiyor. Oldukça yavaş ilerlemesine rağmen insanı sıkmıyor. Fakat bu yılki en iyi film, biraz filmin iyi olmasından, biraz filmin içeriği itibariyle Academy tarafından pohpohlanacağından ötürü 12 Years a Slave olacak. Film özellikle ırçılık konusunda ekstra bir duyalılığa sahipseniz insanı acayip sinir ediyor. Bu duyguyu yaşatabilmek bile başlı başına bir meziyet. Chiwetel Ejiofor'un performansını, filmin son sahnesi dışında pek beğenemedim açıkçası. Tüm film boyunca yüzünde aynı ifadeyle oynadı. Filmin ilk yarısı soluksuz izlendi fakat ikinci yarısında bir dolu konu iç içe geçti. Bir yerlerden Brad Pitt fırladı falan :) Sonuç olarak bence The Wolf of Wall Street ile yarışacak fakat en iyi film ödülünü alacaktır.
Actor
Christian Bale yine muazzam bir kilo değişikliği ile karşımızda. Internette arattığınızda karşınıza çıkan kilo değişimi resmine bu filmi de eklemek gerekiyor sanırım. Filmdeki pislik karakteri, tipiyle birlikte direkt yansıtmış ve oldukça başarılı gözüküyor. Bu kategorideki en zayıf halka, filmdeki oyunculuğu kötü olmamasına karşın Bruce Dern gibi gözüküyor. Huysuz, yaşlı baba rolünü süper oynamış fakat bence onun yerine buraya bir Tom Hanks de konulabilirmiş. Chiwetel Ejiofor ise Bafta'yı alarak favoriler arasında gözüküyor. Çok alacağını düşünmüyorum fakat en iyi filmdeki ırkçılık muhabbeti burada da geçerli olup bir sürpriz gelebilir. Gelelim Di Caprio'ya. Bu adaylığı, daha önceki filmlerindeki oyunculuğunun yanında biraz daha sönük kalıyor gibi. Filmdeki oyunculuğu yine muazzam. Özellikle overdose yaptıktan sonraki saçmalama sahneleri inanılmaz eğlendirici olmuş. Adamın üzerinde zaten yakışan bir beyefendi, zengin adam rolü var ki yine on numara gitmiş. Üstelik bence bu sene, yıllardır alamadığı ödülden dolayı Academy üzerinde bir baskı da oluşabilir. Son röportajında Oscar için değil iyi iş çıkarmak için oynadığını söylese de içten içe bu sene de alamazsa birilerine söveceği aşikar. Bence favori iki adaydan bir tanesi. Diğer ise kesinlikle Matthew McConaughey. İnanılmaz bir kilo vermiş, süper bir oyunculuk göstermiş, Golden Globe almış, en büyük favorilerden birisi. Di Caprio ile kapışacaklar fakat bence ödülü alacak.
Actress
Bu yılki en zor kategorilerden birisi. Herkes favori ama adaylar genel olarak çok sağlam. Sandra Bullock, şahane ötesi bir oyunculuk sergilemiş. Hemen hemen tek başına oynadığı filmin çoook büyük bir kısmını muhtemelen yeşil perde önünde oynadı. Aktif bir diyaloğun çok olmadığı bu tarz oyunculuklar her zaman zordur fakat 2 saat boyunca uzayda tek başına bir oraya bir buraya giden bir kadını bize soluksuz izletti. Kendisi 2. favorim. Amy Adams'ın ise bence bu sene oyunculuğundan çok göğüsleri ön plana çıktı gibi :) Aşk, nefret gibi duyguların yanında bir düzenbazın sevgilisi rolünün hakkını verdi. Filmin ikinci yarısında çok ortalarda yoktu. Bunlar neyse de... Fakat Cate Blanchett... Blue Jasmine tarz olarak beni pek açmadı fakat Allah'ım bu kadının nasıl bir rol yeteneği var böyle. Gerçek hayatta böyle bir senaryonun içinde olunsa yaşayan kişi bu kadının oyunculuğu yanında rol yapıyor gibi gözükür. Zengin kadın karakteri de rolüne inanılmaz gitmiş, muazzam gözüküyordu. Bence bu yılki kategorilerde kazananın en açık olduğu kategori bu olacak. Judi Dench diğerlerine göre biraz zayıf kalmış ve ne yazık ki filmi izleyemediğim için Meryl Streep hakkında yorum yapamıyorum. Eminim orada da müthiş bir oyunculuk vardır ama o filmi izlemeden oyunu Cate'e verdim bile.
Supporting Actor
Bu kategorideki favorim ise Barkhad Abdi. Adam IMDB'de 2013 yılında doğmuş. Çok enteresan bir hayet hikayesi var. İlk filminde Oscar'a aday ve bence sonuna kadar hak ediyor. Tamam özellikle filmin sonlarına doğru filika içerisindeki sahnelerde "American, American" lafında bıktırdı ve o bölümdeki bazı sahnelerde ne yapacağını bilemez bir kaç görüntüsü var fakat rolüne cuk oturmuş. Genel olarak oyunculuğu çok başarılı ve ufak tefek hatalarının es geçilip ödülün kendisine verileceğini düşünüyorum. Bafta'yı da aldı, bu da adaylığının ciddiyetini gösteriyor zaten. Barkhad ile kafa kafaya kapışacak kişi ise tabi ki Jared Leno. Gerçi actor mü actress mi hangi kategoriden girmesi gerektiğine emin olamadım ama Dallas Buyers Club filmini bu kadar izlenebilir ve kaliteli yapan faktörlerden birisi kendisi. Standart bir insanı oynarken bir duygu aktarımı yapmak çok zor olabiliyorken bu adam rolünün hakkını bir travesti olarak veriyor. Adam filmde kendini homofobik bir adama sevdiriyor daha ne olsun:) Jonah Hill'in oyunculuğunu abartı buldum ve açıkçası Di Caprio'nun gölgesinde kaldı zaten. Bradley Cooper ve Michael Fassbender ise, başka bir yıl olsa bu ödülün favorileri olabilirlerdi fakat biraz şansızlıklarına kurban gittiler diyelim.
Supporting Actress
Hemen söyleyeyim, filmi izlemediğim için Julia Roberts ile ilgili yorum yapamıyorum :( Sally Hawkins, aslında oldukça fazla ruh halini yansıtabilecek bir rolde iken beni çok etkilemedi. Şansının olmadığını düşünüyorum. Jennifer Lawrence, geçen seneki en iyi kadın oyuncu Oscar'ından sonra inanılmaz bir çıkışta. Overrated bir oyuncu mu henüz karar veremedim. American Hustle'da fena değildi aslında. Bir filmdeki iyi oyuncu sayısı arttığı zaman bir ya da bir kaçı biraz silik kalıyor. Jennifer için de aynısı geçerli sanırım. Filmin ilk yarısında zaten çok ortada yoktu. İkinci yarıda ise sırf ortaya biraz Jennifer koyalım diye yapılmış sahneler var sanki (Evdeki çıldırma sahnesi falan). Ama her şeye rağmen başarılı bir oyunculuk sergiledi bence ve yine bu yılki favorilerden. June Squibb keşke ödülü alsa. Bu kadar tonton ve huysuz bir kadın olamaz :) Filmin kendisini bu kadar çekici yapan kişilerin başında geliyor aslında. Rolü çok çok fazla değil ama oynadığı az zamanda bile bana gerçek hayatta tanıdığım bir çok babanneyi aynen yansıttı. Bu kategorideki favorim ise Lupita Nyong'o olacak. O kırbaçlanma sahneleri, ağlamaları, insanın yüreğini sızlatıyor. Kendisi de film geçmişi olmayanlardan. Bu sene Hollywood'a özellikle Afrika'dan yeni oyuncular katılacak gibi. Zaten bu seneki ödül törenleri, Ellen'ın sunumu, 12 Years a Slave ve benzeri faktörlerden ötürü tam bir küresel mesaj verme töreni olacak gibi :D
Diğer kategorilerde fazla yorumda bulunmayacağım fakat fikrim olup aday filmleri izlediğim kategorilerdeki favorilerim de aşağıdaki gibi olacak. İşe uyumadan gidecek gibiyiz ama neyse senede bir gece sonuçta. Herkese iyi seyirler diyeyim şimdiden.
Best Picture - 12 Years a Slave
Actor - Matthew McConaughey
Actress - Cate Blanchett
Supporting Actor - Barkhad Abdi
Supporting Actress - Lupita Nyong'o
Directing - Alfonso Cuaron
Costume Design - American Hustle
Film Editing - Gravity
Animated Feature Film - Despicable Me 2
Music (Original Song) - Happy (Despicable Me 2)
Production Design - The Great Gatsby
Visual Effects - Gravity
Writing Adopted Screenplay - The Wolf of Wall Street
Writing Original Screenplay - American Hustle
( Academy Awards 2014, Oscars, Ödül Töreni, 12 Years a Slave, The Wolf of Wall Street, Gravity, Dallas Buyers Club, Leonardo Di Caprio, Christian Bale, Barkhad Abdi)
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:
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 )
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 )
12 Eylül 2013 Perşembe
Primefaces Datatable Contextmenu Disappear Problem Fix
Updatable context menu is a big problem if you are using tree or datatable component of Primefaces. For example in my case, I have a datatable that has row which has different boolean flags. Depending of that flags, I have to change my context menu items. Basically, I have to render different context menus for each row in my datatable. First I tried to update context menu in element but there was a problem which I was finally able to solve...
ContextMenu component has two phases. One is generate or update phase and the other is show phase. If you try to update your context menu on right click, show phase comes first and then it updates itself. After this process, you will see that you context menu appears and disappears. While I was searching for a workaround, I found a post which helped me a lot in Primefaces forum. A guy found a solution which is overriding show function of context menu and then calling this method right after update process is done. This is the best solution I think. That guy applied this workaround for tree component. Below, you can find this approach that is applied to datatable.
Kaynak : http://forum.primefaces.org/viewtopic.php?f=3&t=26813
ContextMenu component has two phases. One is generate or update phase and the other is show phase. If you try to update your context menu on right click, show phase comes first and then it updates itself. After this process, you will see that you context menu appears and disappears. While I was searching for a workaround, I found a post which helped me a lot in Primefaces forum. A guy found a solution which is overriding show function of context menu and then calling this method right after update process is done. This is the best solution I think. That guy applied this workaround for tree component. Below, you can find this approach that is applied to datatable.
<script type="text/javascript">
//patch to fix a problem that the context menu disappears after update
//delay the show to occure after the update
var siteFunctions = {
patchContextMenuShow: function() {
var protShow = PrimeFaces.widget.ContextMenu.prototype.show;
siteFunctions.patchContextMenuShow.lastEvent = null;
PrimeFaces.widget.ContextMenu.prototype.show = function(e) {
var ret;
if (e) {
//saving last event
siteFunctions.patchContextMenuShow.lastEvent = e;
siteFunctions.patchContextMenuShow.lastEventArg = arguments;
siteFunctions.patchContextMenuShow.lastEventContext = this;
} else if (siteFunctions.patchContextMenuShow.lastEvent) {
//executing last event
ret = protShow.apply(siteFunctions.patchContextMenuShow.lastEventContext, siteFunctions.patchContextMenuShow.lastEventArg);
//clearing last event
siteFunctions.patchContextMenuShow.lastEvent = null;
}
return ret;
};
}
};
$(document).ready(function() {
try {
siteFunctions.patchContextMenuShow();
} catch (e) {
console.error(e);
}
});
</script>
<p:contextmenu beforeshow="return true;"
for="dataTable"
id="contextMenuID"
widgetvar="tableContextMenuWV">
<p:menuitem value="Menu 1" />
<p:menuitem value="Menu 2" />
</p:contextmenu>
<p:datatable id="dataTable" widgetvar="dataTableW">
<p:ajax event="contextMenu"
oncomplete="tableContextMenuWV.show();"
update=":formList:contextMenuID" />
</p:datatable>
( primefaces, jsf, datatable, row, context menu, update, show, disappear )Kaynak : http://forum.primefaces.org/viewtopic.php?f=3&t=26813
Kaydol:
Kayıtlar (Atom)