JSF 2.0 dezavantajları? Dürüst olmak gerekirse, temel Web Geliştirme (HTML / CSS / JS, sunucu tarafı ile istemci tarafı, vb.) Ve temel Java Servlet API'sı (istek / yanıt / oturum ) hakkında sağlam bir arka plan bilginiz olmadığında göreceli dik öğrenme eğrisinin dışında , yönlendirme / yönlendirme vb.), ciddi dezavantajlar ortaya çıkmaz. JSF'nin mevcut sürümünde, erken yaşlarda kazandığı olumsuz görüntüden kurtulması gerekiyor ve bu sırada birkaç ciddi dezavantaj vardı.
JSF 1.0 (Mart 2004)
Bu ilk sürümdü. Bilmek istemediğiniz hem çekirdek hem de performans alanlarındaki hatalarla doluydu. Web uygulamanız her zaman sezgisel olarak beklediğiniz gibi çalışmadı. Geliştirici olarak ağlayarak kaçacaktınız.
JSF 1.1 (Mayıs 2004)
Bu, hata düzeltme sürümüdür. Performans hala çok gelişmedi. Ayrıca büyük bir dezavantaj vardı: JSF sayfasında HTML'yi kusursuz bir şekilde satır içi yapamazsınız. Tüm düz vanilya HTML'si , JSF bileşen ağacından önce oluşturulur . Tüm düz vanilyayı <f:verbatim>
, JSF bileşen ağacına dahil edilmeleri için etiketlere sarmanız gerekir . Bu şartnameye göre olmasına rağmen, bu çok eleştiri aldı. Ayrıca bkz. JSF / Facelets: JSF / Facelets'i HTML etiketleriyle karıştırmak neden iyi bir fikir değil?
JSF 1.2 (Mayıs 2006)
Bu, Ryan Lubke tarafından yönetilen yeni JSF geliştirme ekibinin ilk sürümüdür. Yeni ekip çok iyi iş çıkardı. Teknik özelliklerde de değişiklikler oldu. En büyük değişiklik, görünüm yönetiminin iyileştirilmesiydi. Bu sadece JSP'yi JSP'den tamamen ayırmakla kalmadı, bu yüzden JSP'den farklı bir görünüm teknolojisi kullanabildiler, aynı zamanda geliştiricilerin <f:verbatim>
etiketlerle uğraşmadan JSF sayfasında düz vanilya HTML'si satır içi yapmasına izin verdi . Yeni ekibin bir diğer önemli odağı performansı artırmaktı. (Kod adı edildi Sun JSF Referans Uygulama 1.2 geçerlilik süresi içinde Mojarra 2008 civarında, yapı 1.2_08 beri), hemen her yapı bir sonraki olağan (minör) onarımları için (büyük) performans iyileştirmeleri ile sevk gördü.
JSF 1.x'in (1.2 dahil) tek ciddi dezavantajı, konuşma kapsamı olarak adlandırılan istek ve oturum kapsamı arasında bir kapsamın olmamasıdır . Bu, geliştiricileri gizli giriş öğeleriyle, gereksiz DB sorgularıyla uğraşmaya ve / veya bir sonraki istekte ilk model verilerini tutmak istediğinde oturum kapsamını kötüye kullanmaya zorladı. karmaşık web uygulamaları. Ağrı, MyFaces Tomahawk bileşeni, JBoss Seam konuşma kapsamı ve MyFaces Orkestrası gibi sonraki talepte gerekli verileri tutan bir 3. taraf kütüphanesi benimsenerek yumuşatılabilir. <t:saveState>
konuşma çerçevesi.
HTML / CSS puristleri için bir başka dezavantaj, JSF'nin , özellikle bir bileşen görünümde birden çok kez yeniden kullanıldığında (şablon oluşturma, yineleme bileşenleri vb.) Üretilen HTML çıktısındaki :
HTML öğesinin benzersizliğini sağlamak için iki nokta üst üste işaretini karakter ayırıcı karakter olarak kullanmasıdır. id
. Bu CSS tanımlayıcıları yasadışı bir karakter olduğu için, kullanmak gerekir \
gibi çirkin ve tuhaf görünümlü seçicileri sonuçlanan CSS seçicileri içinde iki nokta üst üste kaçmaya #formId\:fieldId {}
hatta #formId\3A fieldId {}
. Ayrıca bkz. JSF tarafından oluşturulan HTML öğesi kimliği, CSS seçicilerinde iki nokta üst üste ":" ile nasıl kullanılır? Ancak, saf bir kullanıcı değilseniz, ayrıca okuyun Varsayılan olarak JSF, web standartlarının css kısmı ile uyumlu olmayan kullanılamaz kimlikler oluşturur .
Ayrıca, JSF 1.x, Ajax olanaklarıyla kutudan çıkmadı. Gerçekten teknik bir dezavantaj değil, ancak bu dönemdeki Web 2.0 hype nedeniyle fonksiyonel bir dezavantaj haline geldi. Exadel , yıllar boyunca iyice geliştirilmiş ve JBoss RichFaces bileşen kütüphanesinin çekirdek parçası haline gelen Ajax4jsf'i tanıtmaya erken başladı . Başka bir bileşen kütüphanesi de yerleşik Ajax güçleriyle birlikte sevk edildi, iyi bilinenler ICEfaces idi .
JSF 1.2 ömrünün yaklaşık yarısında, yeni bir XML tabanlı görünüm teknolojisi tanıtıldı: Facelets . Bu, özellikle şablonlama alanında JSP'nin üzerinde muazzam avantajlar sundu.
JSF 2.0 (Haziran 2009)
Bu, Ajax'ın buzzword olduğu ikinci büyük sürümdü. Birçok teknik ve işlevsel değişiklik vardı. Varsayılan görüntüleme teknolojisi olarak JSP yerine Facelets kullanılır ve Facelets, saf XML ( bileşik bileşenler adı verilen ) kullanılarak özel bileşenler oluşturma özellikleriyle genişletilmiştir . Ayrıca bkz . JSF2.0'dan itibaren görünüm tanımı dili olarak Neden JSP yerine JSP tercih edilir?
Ajax yetkileri, <f:ajax>
Ajax4jsf ile çok benzerlik gösteren bileşenin lezzetiyle tanıtıldı. Ayrıntılı dosya ve yapılandırma üzerinde kural iyileştirmeleri , ayrıntılı dosyayı mümkün olduğunca öldürmek için tanıtıldı faces-config.xml
. Ayrıca, varsayılan adlandırma kapsayıcı kimliği ayırıcı karakteri :
yapılandırılabilir hale geldi, böylece HTML / CSS temizleyicileri rahatlayabilir. Tek yapmanız gereken tek şey olarak tanımlamaktır init-param
içinde web.xml
adı ile javax.faces.SEPARATOR_CHAR
aşağıda belirtilenler gibi istemci kimliği yıllarda her yerde karaktere kendini kullanmadığınızı ve sağlanması -
.
Son fakat en az değil, yeni bir kapsam, görünüm kapsamı tanıtıldı . Daha önce açıklandığı gibi başka bir JSF 1.x dezavantajını ortadan kaldırdı. Sadece @ViewScoped
sonraki (konuşma) isteklerinde verileri tutmak için tüm yolları zahmetsizce konuşma kapsamını etkinleştirmek için fasulye bildirir. Bir @ViewScoped
fasulye daha sonra aynı görünüme (açılan tarayıcı sekmesinden / penceresinden bağımsız olarak) senkronize veya senkronize olmayan bir şekilde (Ajax) gönderip gittiğiniz sürece yaşayacaktır. Ayrıca bkz yönetilen fasulye Görünüm ve İstek kapsamı arasındaki Fark ve nasıl sağ fasulye kapsamını seçilir?
Her ne kadar JSF 1.x'in tüm dezavantajları ortadan kaldırılmış olsa da, JSF 2.0'a özgü hatalar gösterebilir. @ViewScoped
Etiket işleyicileri başarısız nedeniyle kısmi devlet tasarrufunda bir tavuk-yumurta meselesine. Bu JSF 2.2'de düzeltildi ve Mojarra 2.1.18'de desteklendi. Ayrıca HTML5 gibi özel niteliklerin iletilmesidata-xxx
de desteklenmez. Bu JSF 2.2'de yeni geçiş öğeleri / öznitelikleri özelliği ile düzeltildi. Ayrıca JSF uygulaması Mojarra'nın kendi sorunları vardır . Nispeten birçoğu ile ilgilidir bazen unintuitive davranışları<ui:repeat>
, yeni kısmi devlet tasarrufu uygulanması ve kötü uygulanan flaş kapsamı . Çoğu Mojarra 2.2.x sürümünde düzeltildi.
JSF 2.0 zamanı boyunca, jQuery ve jQuery kullanıcı arayüzüne dayanan PrimeFaces tanıtıldı. En popüler JSF bileşen kütüphanesi oldu.
JSF 2.2 (Mayıs 2013)
JSF 2.2'nin piyasaya sürülmesiyle, HTML5 teknik olarak sadece tüm eski JSF sürümlerinde desteklenmiş olmasına rağmen terim olarak kullanıldı. Ayrıca bkz.XHTML neden hala kullanılmaktadır JavaServer Faces 2.2 ve HTML5 desteği . En önemli yeni JSF 2.2 özelliği, özel bileşen öznitelikleri desteğidir, böylece özel tableless radyo düğmesi grupları gibi bir olasılıklar dünyası açar .
Uygulamaya özgü hatalar ve bir doğrulayıcı / dönüştürücüye (zaten JSF 2.3'te sabitlenmiş) bir EJB enjekte edilememesi gibi bazı "sinir bozucu küçük şeyler" dışında, JSF 2.2 spesifikasyonunda gerçekten büyük dezavantajlar yoktur.
Bileşen tabanlı MVC ve İstek tabanlı MVC
Bazıları, JSF'nin en büyük dezavantajının, üretilen HTML / CSS / JS üzerinde çok az ince kontrol yapılmasına izin vermesini tercih edebilir. Bu JSF'nin kendisi değil, bunun nedeni, bileşen tabanlı bir MVC çerçevesi, istek (eylem) tabanlı bir MVC çerçevesi değil. Bir MVC çerçevesini düşünürken HTML / CSS / JS'yi yüksek derecede kontrol etmek temel gereksiniminizse, bileşen tabanlı bir MVC çerçevesine değil, Spring MVC gibi isteğe bağlı bir MVC çerçevesine bakmalısınız . Sadece tüm HTML / CSS / JS ısıtıcı plakasını kendiniz yazmanız gerektiğini dikkate almanız gerekir. Ayrıca bkz . MVC İsteği ve Bileşen MVC'si arasındaki fark .
Ayrıca bakınız: