Java Server Faces 2.0'ın ana dezavantajları nelerdir?


234

Dün mutlu bir ASP.NET MVC / jQuery geliştiricisi olmama rağmen, gerçekten etkileyici görünen Java Server Faces 2.0'da bir sunum gördüm. JSF hakkında en çok sevdiğim, özellikle AJAX-ağır sitelerde ASP.NET MVC'den çok daha hızlı geliştirme yapan çok sayıda AJAX-Etkin UI bileşeni oldu. Entegrasyon testi de çok güzel görünüyordu.

Sunum sadece JSF'nin avantajlarını vurguladığından, diğer tarafı da duymak isterim.

Yani sorularım:

  • Java Server Faces 2.0'ın ana dezavantajları nelerdir?
  • Bir JSF geliştiricisinin JSF yerine ASP.NET MVC kullanmayı düşünmesini ne sağlayabilir?

2
Açıkçası, bu bileşen, Bean, "özellik" saçmalık kurtulmak ve normal kodlama geri dönmeliyiz. Benim için her şeyi yapmaya çalışacak kalın bir çerçeve istemiyorum (ve bunu korkunç bir şekilde ekleyebilirim) ve beni altta olup bitenden uzak tutuyor. TypeScript'e göz atmanızı ve bununla çalışan ve bunun üzerine inşa edilmiş çok ince kod katmanları bulmaya çalışmanızı öneririm. JSF / PF ve arkadaşlarının bir çok "özelliği" var ama onların etrafında yolunuzu uçurmanız ve istediğiniz şeyi yapmak için doğru sihirli özellik kodunu veya ağaç düzenini bilmelisiniz.
Andrew

Yanıtlar:


464

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-paramiçinde web.xmladı ile javax.faces.SEPARATOR_CHARaş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 @ViewScopedsonraki (konuşma) isteklerinde verileri tutmak için tüm yolları zahmetsizce konuşma kapsamını etkinleştirmek için fasulye bildirir. Bir @ViewScopedfasulye 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. @ViewScopedEtiket 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:


5
Kapsamlarla ilgili olarak: Java EE 6'da, farklı görünümlere talepleri kapsayan bir kapsam kullanmak da mümkündür. Bu CDI konuşma kapsamıdır. Teknik olarak JSF'nin bir parçası olmasa da, JSF ile o kadar iyi bütünleşir ki, yerel bir JSF tesisi gibi hissedilir.
Arjan Tijms

3
Bununla birlikte, ui: repeat'in düzeltilmesi gerekir ve her iki uygulamada h: dataTable + ajax yuvalanmış hatalar, bir yıldan fazla sürenin ardından acıklı olur. Yazık gerçekten, iki sorunlar için ben JSF 2.0 öneriyoruz değil çünkü eğer herkes olarak tüm web uygulama geliştirme için çözümü.
fdreger

1
Güzel cevap ama sanırım test hakkında bazı argümanlar özledim. JSF'yi test etmek zor. ASP.NET MVC, TDD için hazırdır.
Guaido79

14
20 yıllık JAVA / WEB deneyimim var ve JSF'yi benim gibi kullanan tüm projeleri reddediyorum ve lütfen rahatsız hissetmeyin, JSF'nin tüm çerçevelerin en korkunç olduğunu hissediyorum. Css, html ve java'yı bir araya getiren her soyutlama kuralını ihlal ediyor. JSF projelerindeki ilerleme, örneğin Spring MVC projeli bir ExtJS ile karşılaştırıldığında çok saçma. JSF'de bakım korkunç ve basittir, aksi takdirde anlaşılır sorunlar JSF'de tam bir karışıklıktır ***. Deneyimlerime göre, JSF KULLANMAYIN. Standart ya da değil, standart olmaması gereken kötü bir standarttır. VAADIM veya küçük kapı veya ExtJS'yi deneyin.
Lawrence

1
Büyük dezavantajı, yeniden düzenleme desteği, kötü web bölümü desteği, kötü Sunucu entegrasyonu, click and go to component or includebileşenlerin / etiketlerin bağımlılık grafiğinin olmaması ve kendi veya 3. taraf etiketleri için menü bulunmaması ile tutulma IDE'ye vasat entegrasyonudur . Sadece bileşen veya işlev x'in nerede kullanıldığını anlamak için proje genelinde arama yapmak için çok zaman harcıyorum.
djmj

56

5 yıllık JSF ile çalıştıktan sonra 2 sent ekleyebileceğimi düşünüyorum.

İki büyük JSF dezavantajı:

  1. Büyük öğrenme eğrisi. JSF karmaşıktır, bu sadece doğrudur.
  2. Onun bileşen doğası. Bileşen tabanlı çerçeve, çok sayıda komplikasyon ve felaketle (neredeyse 5 yıl içinde JSF'de GET'i desteklememek gibi) gelen Web'in gerçek doğasını gizlemeye çalışır.
    IMHO'nun HTTP İstek / Yanıtını geliştiriciden gizlemesi çok büyük bir hatadır. Deneyimlerime göre, bileşen tabanlı her çerçeve Web geliştirmeye soyutlama ekler ve bu soyutlama gereksiz ek yük ve daha fazla karmaşıklık ile sonuçlanır.

Ve aklıma gelen küçük dezavantajlar:

  1. Varsayılan olarak, nesnenin kimliği ebeveynlerinin kimliklerinden oluşur, örneğin form1: düğme1.
  2. Yanlış sayfanın parçasını yorumlamak için kolay bir yol yoktur. Etiket <ui:remove>, yine de ayrıştırılmış sözdizimsel olarak doğru içeriğe ihtiyaç duyar.
  3. Örneğin kontrol etmiyoruz Düşük kaliteli 3. parti bileşenleri isRendered()içine processXxx()geçmeden önce yöntemi.
  4. LESS & Sencha'yı dahil etmek zordur.
  5. REST ile iyi oynamıyor.
  6. UX tasarımcıları için o kadar kolay değil, çünkü kullanıma hazır bileşenlerin üzerine yazılması gereken kendi CSS stilleri vardır.

Beni yanlış anlamayın. Sürüm 2'de bir bileşen çerçevesi JSF gerçekten iyi, ama yine de bileşen tabanlı ve her zaman olacak ...

Lütfen Goblen, Wicket'in düşük popülaritesine ve deneyimli JSF geliştiricilerinin düşük hevesine bir göz atın (daha da anlamlı olanı). Ve kontrast için, Rails, Grails, Django, Play'in başarısına bir göz atın! Çerçeve - hepsi eylem tabanlıdır ve programcıdan gerçek istek / yanıt ve webin vatansız doğasından saklanmaya çalışmazlar .

Benim için büyük JSF dezavantajı. IMHO JSF bazı uygulama türlerine (intranet, form yoğun) uygun olabilir, ancak gerçek hayattaki web uygulamaları için iyi bir yol değildir.

Umarım birisine ön uçla ilgili seçimlerinde yardımcı olur.


4
+1 web vatansız, iyi veya kötü olacak şekilde tasarlanmıştır, kimse onu değiştiremez (ve bunun için bir sebep yoktur!)
Alireza Fattahi

1
Kesinlikle irctc.co.in Hindistan'da en büyük e-ticaret sitesi olan jsf içinde büyük siteleri işleyebilir. . . ancak evet JSF ile oluşturulan kullanıcı arayüzü üzerinde fazla kontrole sahip değilsiniz.
Nirbhay Mishra

2
A'nın ne olduğunu tanımlayabilir misiniz real-life web application? Ayrıca JSF, doğru olabilen istek / yanıtın doğasını gizler, ancak programcıların gerçekten kapakların altında neler olduğunu bilmek sorumluluğu vardır. HTTP'nin nasıl çalıştığını bilmiyorsanız, JSF'den veya başka bir çerçeveden önce öğrenin.
Xtreme Biker

25

Akla gelen birkaç dezavantaj:

  1. JSF bileşen tabanlı bir çerçevedir. Bunun, bileşen modeline uymakla ilgili doğal kısıtlamaları vardır.
  2. AFAIK JSF yalnızca POST'u destekler, bu nedenle bir yere GET istiyorsanız, düz bir sunucu uygulaması / JSP yapmanız gerekir.
  3. Çoğu bileşen ilişkisel veritabanları ve ön uç JavaScript gibi etki alanları üzerinde soyutlamalar sağlamaya çalışır ve çoğu zaman bu soyutlamalar "sızıntılı" ve hata ayıklaması çok zordur.
  4. Bu soyutlamalar, küçük bir geliştirici veya belirli bir alanla (ör. Ön uç JavaScript) rahat olmayan bir kişi için iyi bir başlangıç ​​noktası olabilir, ancak birkaç katman ve bunları kullanan birçok kişi olduğundan performans için optimize etmek çok zordur. kaputun altında neler olup bittiğini çok az anlamalısınız.
  5. Genellikle JSF ile kullanılan şablonlama mekanizmalarının web tasarımcılarının çalışma şekliyle bir ilgisi yoktur. JSF için WYSIWYG editörleri ilkeldir ve her durumda, tasarımcınız size yaşları dönüştürmek için harcayacağınız HTML / CSS verecektir.
  6. EL ifadeleri gibi şeyler statik olarak kontrol edilmez ve hem derleyici hem de IDE'ler hata bulmada iyi bir iş çıkarmaz, bu nedenle çalışma zamanında yakalamanız gereken hatalarla sonuçlanırsınız. Bu, Ruby veya PHP gibi dinamik olarak yazılmış bir dil için iyi olabilir, ancak Java ekosisteminin katıksız şişkinliğine dayanmam gerekirse, şablonlarım için yazmayı talep ediyorum.

Özetle: JSF / servlet / bean boilerplate kodunu yazmaktan kaçınmak için JSF ile tasarruf edeceğiniz zaman, ölçeklendirmek ve tam olarak ne yapmak istediğinizi yapmak için x10 harcarsınız.


15
JSF 1.x'e açıkça atıfta bulunuyor ve talep tabanlı bir MVC çerçevesini göz önünde bulundurarak bileşen tabanlı bir MVC çerçevesi olduğunu gözden kaçırıyor.
BalusC

17
1) Bileşen tabanlı bir MVC istemiyorsanız, neden JSF'ye bakıyorsunuz? 2) JSF 2.0'dan beri artık değil. 3) Etki alanı kısmı doğru değil. JSF bileşenlerinin hiçbiri bunu yapmaz. Impl JS hataları, peki, herhangi var mı? Mojarra şu an için oldukça olgun. 4) JSF'nin gerçekten dik bir öğrenme eğrisi vardır, ancak bu mutlaka kötü değildir. 5) Görsel editörler yine de epik başarısızlık. Yine, bileşen tabanlı ve istek tabanlı MVC maddesi. 6) JSF için değil, doğru araç meselesi. Eclipse eklentileri vardır ve IntelliJ Ultimate bunu kutudan çıkarır.
BalusC

19
@BalusC, saygısız bir ses çıkarırsam beni affeder, ancak soru JSF 1'e karşı JSF 2 değildir ve "JSF'nin tarihi" gibi okunan cevabınız ilgisizdir. Ayrıca JSF'nin "ciddi dezavantajları" olmadığı iddiası, temel mühendislik prensibini tüm araçların sınırlamaları ve diğer çözümleri yerine getirdikleri etki alanları olduğunu kabul etmiyor.
Kay Pale

24
JSF 2.0'ın eski dezavantajları nasıl ortadan kaldırdığını öğrenmek için tarihin çok alakalı olduğunu düşünüyorum, çünkü JSF'nin tarihte olumsuz bir imago verdiği tam olarak dezavantajlardı. Kalıntıya gelince, o zaman sadece bir anlaşmazlığımız var.
BalusC

5
Dürüst olmak gerekirse neden "bileşen tabanlı" bir dezavantaj olarak listelediğinizi anlamıyorum. Bu, "http'nin dezavantajı vatansız olmasıdır" demek gibidir. Tabii bazen http'nin vatansız olduğu gerçeği berbat, ama bazen tam olarak neden kullanıyoruz. Aynısı JSF için de geçerli.
arg20

19

Benim için JSF 2.0'ın en büyük dezavantajı sadece JSF'nin öğrenme eğrisi değil, aynı zamanda yararlı bir iş yapmak için kullanmanız gereken bileşen kütüphaneleri. Gerçekten yetkin olmak için uğraştığınız şaşırtıcı özellik ve standart sayısını düşünün:

  • Çeşitli enkarnasyonlarda HTML. Bilmene gerek yokmuş gibi yapma.
  • HTTP - neler olduğunu anlayamadığınızda Firebug'u açmalı ve görmelisin. Bunun için bunu bilmelisin.
  • CSS - Beğen ya da beğenme. Gerçekten o kadar da kötü değil ve en azından orada bazı güzel araçlar var.
  • XML - JSF muhtemelen ad alanlarını bu dereceye kadar kullandığınız ilk yer olacaktır.
  • Servlet Özellikleri. Er ya da geç bu pakette arama yöntemlerine gireceksiniz. Bunun dışında Facelet'lerinizin XHTML'ye nasıl dönüştüğünü bilmelisiniz.
  • JSP (çoğunlukla JSF'de neden ihtiyacınız olmadığını biliyorsunuz)
  • JSTL (yine, çoğunlukla eski çerçeveyle başa çıkmak için)
  • Anlatım Dili (EL) çeşitli şekillerde.
  • ECMAScript, JavaScript veya başka bir ad vermek istediğiniz adrestir.
  • JSON - bunu kullanmasanız bile bunu bilmelisiniz.
  • AJAX. JSF 2.0'ın bunu sizden gizlemek için iyi bir iş yaptığını söyleyebilirim, ancak hala neler olduğunu bilmeniz gerekiyor.
  • DOM. Ve bir tarayıcı nasıl kullanıyor. Bkz. ECMAScript.
  • DOM Etkinlikleri - tek başına bir konu.
  • Java Kalıcılık Mimarisi (JPA), uygulamanızın herhangi bir arka uç veri tabanına sahip olmasını istiyorsanız.
  • Java'nın kendisi.
  • Siz varken JSEE.
  • Bağlam Bağımlılık Enjeksiyonu belirtimi (CDI) ve JSF 2.0 ile nasıl çakıştığı ve JSF 2.0 ile nasıl kullanıldığı
  • JQuery - Onsuz iyi geçinmeni görmek istiyorum.

Şimdi, işiniz bittiğinde, tescilli spesifikasyonlar, yani bileşen kütüphaneleri ve sağlayıcı kütüphaneleri ile devam edebilirsiniz:

  • PrimeFaces (bileşen bileşen kütüphanem)
  • RichFaces
  • MyFaces
  • IceFaces
  • EclipseLink (JPA Sağlayıcım)
  • Hazırda
  • Kaynak

Ve kabı unutma! Ve tüm bu yapılandırma dosyaları:

  • GlassFish (2, 3 vb.)
  • JBoss
  • erkek kedi

Peki - BU KOLAY YAPIYOR MU? Elbette, tek yapmanız gereken en basit etkileşimlere sahip en temel web sayfaları olduğu sürece JSF 2.0 "kolay" dır.

Basitçe söylemek gerekirse, JSF 2.0, bugün yazılım evreninde olduğu gibi yapıştırılmış teknolojilerin en karmaşık ve hantal karmasıdır. Ve kullanmayı tercih ettiğim hiçbir şey düşünemiyorum.


42
Bunların çoğu başka herhangi bir web çerçevesi için de geçerlidir. JSF'nin jQuery ile üretken olmak için bilmeniz gereken hatası nedir?
Adrian Grigore

8
JSF sadece görünüm katmanıdır. Şimdi, diğer teknolojilerle tüm bunları bilmenize gerek olmadığını ima ediyorsunuz, lütfen bize hangisini gösterebilir misiniz?
arg20

Bu teknolojiler açık kaynak olmasına rağmen, kendilerini koruyan özel kuruluşlara sıkı sıkıya bağlıdırlar. Belki de tescilli kelime sizin için doğru değil, ama olabilir de.
AlanObject

Ben @AlanObject savunmasına gelmek istiyorum ... Ben tüm açık kaynak projeleri, aslında birileri tarafından "Sahip olunan" olduğu gibi, tescilli söyleyerek demek olabilir hissediyorum .. Örneğin MySQL alın. Oracle'a satıldıklarında gerçekten büyük puanlar aldılar. Ayrıca, Java yaptı !! Bu nedenle, birçok kez açık kaynaklı projeler, kullanılmaya / düzenlenmeye / katkıda bulunulmaya açık olsalar da, halen kullanmakta olduğunuz her açık kaynak aracının doğasında bulunan özelliklere tabidir. Birisi tarafından "Sahip olunması" nedeniyle. Kullanmak için gerekli olan özellikleri görmezden gelemezsiniz. Bu kötü bir şey değil :)
CA Martin

13
  1. Deneyimsiz geliştiriciler genellikle acı veren yavaş uygulamalar yaratacak ve kod gerçekten çirkin ve bakımı zor olacaktır. Başlaması aldatıcı basittir, ancak iyi programlar yazmak istiyorsanız aslında öğrenmeye biraz yatırım gerektirir.
  2. En azından başlangıçta sık sık bazı sorun üzerinde "sıkışmış" olacak ve internet üzerinde çalışmak balusc mesajları okumak için daha fazla zaman harcayacak :) Bir süre sonra daha az ve daha az olacak, ama yine de can sıkıcı olabilir.
  3. Sorunun bilgi / hata eksikliğinden değil aslında bir hatadan kaynaklandığını öğrendiğinizde daha da can sıkıcı. Mojarra oldukça hatalıydı ve başka bir bileşen katmanı daha da fazla sorun yaratıyor. Richfaces şimdiye kadar yazılmış en büyük bok yazılım parçasıydı :) Şimdi sürüm 4'te nasıl olduğunu bilmiyorum. Daha iyi olan Primefaces var, ama yine de özellikle daha egzotik bileşenlerle hatalara veya özellik eksikliğine rastlayacaksınız. Ve şimdi Primefaces güncellemeleri için ödeme yapmanız gerekecek. Yani ben onun arabası söyleyebilirim ama özellikle 2.2 sürümü spec bazı sorunları düzelttikten sonra daha iyi oluyor. Çerçeve daha olgunlaşıyor ama yine de mükemmel olmaktan uzak (belki de daha iyi?).
  4. Özellikle esnek bulmuyorum. Genellikle çok çok özelleştirilmiş bir şeye ihtiyacınız varsa ve bunu yapan hiçbir bileşen yoksa - biraz acı verici olacaktır. Yine ortalama geliştirici perspektifinden konuşuyorum - son teslim tarihleri, hızlı okuma öğreticileri olan ve takıldığınızda stackoverflow'u arama, çünkü gerçekten nasıl çalıştığını öğrenmek için zaman yok :) Çoğu zaman bazı bileşenler "neredeyse" neye ihtiyacınız var gibi görünüyor, ama tam olarak değil ve bazen istediğiniz bir şey yapmak için çok fazla zaman harcayabilirsiniz :) Kendi oluşturmak veya mevcut bileşen işkence daha iyi olup olmadığını değerlendirirken dikkatli olmak gerekir. Aslında gerçekten benzersiz bir şey oluşturuyorsanız JSF'yi tavsiye etmem.

Kısacası dezavantajlarım: Karmaşıklık, Çok düzgün bir gelişme değil, buggy, esnek değil.

Tabii ki de avantajları var, ama sorduğunuz şey bu değil. Her neyse, çerçeve ile olan deneyimim başkalarının farklı fikirleri olabilir, bu yüzden en iyi yolu sadece bir süre denemek için onun için olup olmadığını görmek için (sadece daha karmaşık bir şey - naif örnekler değil - JSF gerçekten parlıyor :) IMHO en iyi kullanım örneği JSF, CRM'ler gibi iş uygulamaları ...


11

"JSF, Denetleyici koduna girmeden kontrol edemeyeceğiniz veya değiştiremeyeceğiniz Görünüm katmanı HTML ve JavaScript çıktısını verecektir."

Aslında JSF size esneklik sağlar, standart / üçüncü taraf bileşenleri kullanabilir veya oluşturulanlar üzerinde tam kontrole sahip olan kendi bileşenlerinizi oluşturabilirsiniz. JSF 2.0 ile özel bileşenlerinizi oluşturmanız gereken tek bir xhtml'dir.


11

Java Server Faces uzmanı değilim. Ama IMHO ana dezavantajı sunucu tarafı olmasıdır. ASP.NET Web Formları, ASP.NET MVC, Java Sunucu Yüzleri, Struts, php çerçeveleri ve raylar çerçevelerinde ruby ​​gibi sunucu tarafı web sunum katmanı çerçevelerini öğrenmek ve kullanmaktan bıktım. Hepsine elveda dedim ve Angularjs ve TypeScript'e merhaba dedim. Sunum katmanım tarayıcıda çalışıyor. Php veya ASP.NET çalıştıran Windows IIS tarafından veya Linux üzerinde çalışan bir Apache web sunucusu tarafından sunulması önemli değil. Sadece her yerde çalışan tek bir çerçeve öğrenmem gerekiyor.

Sadece iki sentim.


Ve her müşteri tarafı çerçevesinin güvenlik, doğrulama vb. İçin bir aerverside muadili olması gerektiğini unutmayın
Kukeltje

1
Evet tabi ki. Sadece güvenlik ve validasyon için değil, arka uç ve iş mantığı için. Tüm restfull web hizmetleri yoluyla yapılır. Burada amaç sunucu tarafında html oluşturmaktan kaçınmaktır.
Jesús López

10

JSF ile örnek bir proje geliştirdik (Üç haftalık bir araştırmaydı, bu yüzden bazı şeyleri kaybedebiliriz!)

Core jsf kullanmaya çalışıyoruz, eğer bir bileşen gerekirse PrimeFaces kullandık.

Proje navigasyonlu bir web sitesiydi. Menü tıklandığında her sayfa ajax aracılığıyla yüklenmelidir.

Site iki kullanım alanına sahiptir:

  1. Izgaralı bir sayfa. Izgara ajax aracılığıyla yüklenir ve sıralama ve sayfalamayı desteklemelidir
  2. Üç adımda sihirbaz sayfası. Her sayfada istemci tarafı doğrulaması (basit doğrulamalar için) ve sunucu tarafı ajax temel doğrulaması (karmaşık doğrulamalar için) vardır. Herhangi bir sunucu istisnası (servis katmanından) sonraki sayfaya gitmeden aynı sihirbaz sayfasında görüntülenmelidir.

Onu bulduk:

  1. JSF görünüm durumunu düzeltmek için omniFaces'den bazı hack'ler kullanmanız gerekir. Birbirine ajax aracılığıyla sayfalar eklediğinizde JSF durumu bozulur. Bu JSF'de bir hata gibi görünüyor ve sonraki sürümlerde düzeltilebilir (2.3'te değil).
  2. JSF Flow, ajax ile düzgün çalışmıyor (veya çalışamadık!) Bunun yerine asal yüz sihirbazı bileşenini kullanmaya çalışıyoruz, ancak istemci doğrulaması standart JSF akış standardı değilken desteklenmiyor ve ortalama görünüyor.
  3. JqGird gibi bazı jQuery bileşenlerini kullanırken ve JSON sonuçlarını yüklemeniz gerekiyorsa, saf sunucu uygulaması kullanmanız önerilir, JSF sizin için hiçbir şey yapmaz. Dolayısıyla, bu tür bileşenleri kullanırsanız, tasarımınız JSF'ye sığmaz.
  4. Ajax tamamlandığında bazı istemci komut dosyaları yapmaya çalışıyoruz ajaxCompleteve PF 4'ün kendi ajax etkinliklerini uyguladığını tespit ettik. Bazı jQuery bileşenleri vardı ve kodlarını değiştirmemiz gerekiyor.

Yukarıdaki örneği Ajax olmayan bir şekilde değiştirirseniz projeyle (veya en azından daha az ajax projesiyle) değiştirirseniz, yukarıdaki sorunların çoğuyla karşılaşmazsınız.

Araştırmamızı şöyle özetliyoruz:

JSF tamamen ajax temel web sitesinde iyi çalışmıyor.

Tabii ki JSF'de bazı projelerde çok yardımcı olabilecek birçok güzel özellik buluyoruz, bu yüzden proje ihtiyaçlarınızı düşünün.

Lütfen JSF avantajlarını incelemek için JSF teknik belgelerine bakın ve bence JSF'nin en büyük avantajı @BalusC ;-) 'den TAM VE BÜYÜK destek.


6

Benim için JSF'nin en büyük eksikliği programlı (dinamik olarak) oluşturulan sayfalar için yetersiz destek.
Sayfanızı dinamik olarak java kodundan oluşturmak istiyorsanız (sayfa bileşeni modeli oluşturun). Örneğin, WYSIWYG web sayfası yapıcısı üzerinde çalışıyorsanız. Bu kullanım durumunun yeterli dokümantasyonu genellikle mevcut değildir. Denemeniz gereken birçok nokta vardır ve gelişim yavaştır. Birçok şey beklediğiniz gibi çalışmaz. Ama genellikle olası bir şekilde kesmek.
İyi olan şey, JSF'nin felsefesinde veya mimarisinde sorun olmamasıdır. Yeterince ayrıntılı değil (bildiğim kadarıyla).

JSF 2, bileşen geliştirmeyi kolaylaştıracak Kompozit Bileşenleri getirdi, ancak dinamik (programatik) yapıya destekleri çok zayıf. Sessiz karmaşık ve neredeyse belgelenmemiş dinamik Kompozit Bileşen yapısının üstesinden gelirseniz, birkaç Kompozit bileşeni biraz daha derine yerleştirirseniz, bazı istisnalar atmadan çalışmayı bırakırlar.

Ancak JSF topluluğunun bu eksikliklerin farkında olduğu anlaşılıyor. Bu iki
hatadan görebileceğiniz gibi onlar üzerinde çalışıyorlar http://java.net/jira/browse/JAVASERVERFACES-1309
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-599

Durum en azından şartnameden bahsediyorsak JSF 2.2 ile daha iyi olmalıdır.


6

Primefaces / JSF deneyimimin son birkaç ayı hakkında yorumda bulunmak:

  • Bileşenleri "raf dışında" kullanabiliyorsanız, sanırım korkunç değil.
  • Ancak, dışarı çıktığınızda ve özel kullanıcı arayüzlerine ihtiyaç duyduğunuzda iyi oynamaz. - Örneğin, projemiz için Twitter'ın önyüklemesini kullanmamız gerekiyordu. (Asal önyükleme önyükleme değil).
    • Artık sayfalarımız şu şekilde çalışıyor:
      • Sayfa yüklenir.
      • Kullanıcı ajax işlevselliğine sahip bir Primefaces ile etkileşime girer
      • Bootstrap'ın javascript bağları kopuyor
      • Her şeyi yeniden hatırlatmak için ekstra javascript çalıştırıyoruz

JSF'nin javascript yazmaktan kaçınma sözü, Primefaces kullanmıyor olsaydık daha fazla javascript yazmaya dönüştü - ve bu javascript, Primefaces'in kırdığı şeyi düzeltmektir.

Bu bir zaman lavabo - tekrar "raf kapalı" şeyler kullanmak sürece. Ayrıca Selenium ile çalışmak zorunda kalırken gerçekten çirkin (Primefaces). Her şey yapılabilir - ama yine de - çok fazla zaman var.

Bir UX / tasarım ekibiyle çalışıyorsanız ve kullanıcı arayüzünde hızlı bir şekilde yinelenmeniz gerekiyorsa kesinlikle bundan kaçının - jquery / düz HTML yazarak veya tepki / açısal bakarak zaman kazanabilirsiniz.


Hayır, bootstrap ve primefaces'i bir araya getirme seçiminiz gerekenden daha fazla javascript yazmanıza neden oldu. Önyükleme yüzlerini veya PF yanıt verebilirliğini kullanın. Selenyum ile çalışmak nasıl çirkin? Lütfen detaylandırın.
Kukeltje

İşte bir selenyum örneği. HTLM onay kutusu: <input type="checkbox" name="versionsTab" value="version1"> Primefaces onay kutusu: <div class="ui-chkbox ui-widget"> <div class="ui-helper-hidden-accessible"> <input type="checkbox" name="datasetForm:tabView:versionsTable_checkbox"> </div> <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"> <span class="ui-chkbox-icon ui-c"></span> </div> </div> Selenium, gizlenmiş olan gerçek onay kutusunu bulamadı. Örneğin, seçiciler / kodlama / vb. ile bulabildim ama teknik olmayan QA ekibi bulamadı
rprasad

1
Birleştirilmiş adı mı kastediyorsunuz? Güzellik bakanın gözlerindedir. Biraz xpath öğrenirseniz, çok fazla sorun olmadan atlatılabilir. Ve bu özellikle PF olayı değil. Ve tasarım ekibi ile ilgili şeyler. Şablonu tasarlamalarına izin verin ve geri kalanı için jquery-ui yönergelerine uyun. Bizim için mükemmel çalıştı ...
Kukeltje

Projeye daha sonra katıldım, ancak projenin önyükleme yüzleriyle başladığı ancak tam önyükleme (+ primefaces
rprasad

Uygulama çalışır - Primefaces hiçbir şekilde bir gösteri durdurucu değildir - ancak ekstra bir zaman lavabosu vardır (ve olmaya devam etmektedir). Örneğin, özellikle Play ve Django gibi çerçeveler kullanan meslektaşlarla karşılaştırıldığında. (Diğer noktanızla aynı
fikirdeyim

1

JSF'nin birçok avantajı var, soru dezavantajlı olmak üzerine birkaç nokta eklememe izin verin.

Bir web projesini bir zaman çerçevesinde uygulamak için pratik bir senaryoda, aşağıdaki faktörleri göz önünde bulundurmanız gerekir.

  • Ekibinizde her senaryoya uygun en iyi kontrolleri önerebilecek kadar kıdemli üyeniz var mı?
  • İlk öğrenme eğrisini karşılayacak bant genişliğiniz var mı?

  • Ekibinizde
    geliştiriciler tarafından üretilen JSF malzemelerini inceleyebilecek yeterli uzmanlığa sahip misiniz ?

Sorular için cevabınız 'Hayır' ise, sürdürülemeyen bir kod tabanı elde edebilirsiniz.


0

JSF'nin tek bir dezavantajı vardır: "JSF" geliştirmeye başlamadan önce web geliştirme, çekirdek java ve ön uç mimariyi açıkça anlamalısınız.

Günümüzde "yeni" JavaScript çerçeveleri sadece "JSF" bileşen tabanlı modeli kopyalamaya / yapıştırmaya çalışın.


0

Spring MVC, Wicket, Goblen vb.Gibi tüm "ana" çerçeveler arasında, Java EE'nin kompozit bileşenleri ile JSF'si, sunulan en ayrıntılı sunum katmanı ve bileşen odaklı teknolojidir. HybridJava tarafından sağlanan çözümlere kıyasla biraz hantal ve eksik.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.