JQuery ve AngularJS gibi JavaScript kitaplıkları ile UI elde edilebildiğinde JSF'ye ihtiyaç duyulur


116

JSF hakkında bir UI çerçevesi olduğunu ve bazı UI bileşenleri sağladığını okuyordum. Ancak jQueryUI, AngularJS, ExtJS ve hatta düz HTML, CSS ve JavaScript'te bulunan bileşen sayısından nasıl daha iyi veya farklıdır?

Neden birisi JSF öğrenmeli?


3
sunucu tarafından oluşturulan html'nin avantajları: arama motoru aranabilirliği, yetkilendirmeye dayalı görünümleri gizleme. aksi takdirde, onu saf ajax ui için terk ettik.
Neil McGuigan

5
Ayrıca JSF'yi AngularJS + RESTful arka uç lehine terk ettim. (Elmalar ve portakallar, ama Angular o kadar güzel ki JSF'nin pek çok faydasına ihtiyacım yok)
arg20

JSF, Servlet API'nin üzerine inşa edilen bileşen tabanlı bir MVC çerçevesidir ve bileşenleri, JSP'de veya Facelets gibi herhangi bir Java tabanlı görünüm teknolojisinde kullanılabilen taglib'ler aracılığıyla sağlar.
Divyesh Kanzariya

Yanıtlar:


154

JSF'den düz JSP / Servlet / HTML / CSS / JS'ye jQuery'den düz JS'ye benzer: daha az kodla daha fazlasını yapın. Çekmek için PrimeFaces (jQuery + jQuery UI tabanlı) bir örnek olarak, onun aracılığıyla göz vitrin tam kod örnekleri görmek. BootsFaces (jQuery + Bootstrap UI tabanlı) ayrıca eksiksiz kod örnekleri içeren bir vitrine sahiptir. Bu örnekleri yakından incelerseniz, temelde model olarak basit bir Javabean sınıfına ve görünüm olarak bir XHTML dosyasına ihtiyacınız olduğunu göreceksiniz.

JSF'yi tek başına HTML / CSS / JS'nin yerine geçecek şekilde görmemeniz gerektiğini unutmayın, ayrıca sunucu tarafı kısmını da hesaba katmalısınız (özellikle: JSP / Servlet). JSF, HTTP istek parametrelerini toplama, bunları dönüştürme / doğrulama, model değerlerini güncelleme, iş işlerini yapmak için doğru Java yöntemini çalıştırma ve HTML / CSS / JS standart kodu oluşturma ihtiyacını ortadan kaldırır. JSF ile temelde görünüm tanımı olarak bir XHTML sayfası ve model tanımı olarak bir Javabean sınıfı elde edersiniz. Bu, gelişimi büyük ölçüde hızlandırır.

Her bileşen tabanlı web MVC çerçevesinde olduğu gibi, işlenmiş HTML / CSS / JS üzerinde JSF'de daha az ayrıntılı kontrole sahip olursunuz. Özel JS kodu eklemek, sunucu tarafındaki JSF görünüm durumunu da hesaba katmanız gerektiği için o kadar kolay değildir (örneğin, JS tarafında devre dışı bırakılmış bir düğmeyi etkinleştirmek, JSF tarafında düğmeyi etkinleştirmez, bu da bir büyük güvenlik avantajı). Ancak bu büyük bir gösterici ise, Spring MVC gibi eylem tabanlı bir web MVC çerçevesi arayın . Yalnızca tüm bu HTML / CSS / JS kodunu (ve XSS, CSRF ve DOM manipülasyonuna karşı önlemeyi) kendiniz yazmanız gerektiğini hesaba katarsınız . Ayrıca Facelets'ten JSP'ye geri dönerseniz, gelişmiş şablonlama yeteneklerini de kaçıracaksınız.

Öte yandan, büyük bir JSP / Servlet / HTML / CSS / JS / jQuery tabanlı web siteniz varsa ve tekrarlanan JSP / Servlet / HTML / CSS / JS / jQuery şablon kodunu yeniden kullanılabilir bileşenlere yeniden düzenlemek istiyorsanız, çözümlerden biri JSF olacaktır. Özel şablonlar, etiket dosyaları ve bileşenler buna yardımcı olabilir. Bu perspektifte, JSF, JSP / Servlet / HTML / CSS / JS / jQuery'nin üzerinde durur (ve bu nedenle, JSF'ye dalmadan önce bu temel bilgileri anlamak oldukça önemlidir).

JSF tabanlı gerçek bir dünya projesini burada bulabilirsiniz: Java EE Kickoff Uygulaması . JSF'nin yanında iyi HTML5 , CSS3 ve jQuery olduğunu göreceksiniz .

Ayrıca bakınız:


15
Daha az kodla daha fazlasını mı yapın? Ama daha fazla xml ile ... ne değiş tokuş ... ayrıca, sizi esneklikten
mahrum ediyor

33
JSF 2.0+ sürümünde xml gerekli değildir.
Çağatay Civici

5
JSF 2.0'da Ek Açıklamalarımız var
VdeX

1
Görünüşe göre, görünümün çoğu sunucuda oluşturulduğu için, JSF ile iş / denetleyici katmanı ile görünüm arasında net bir tanımlama yok gibi görünüyor. Tarayıcıya gönderilmeden önce her şeyin sunucuda derlendiğini anlıyorum, ancak Java nesnemin işleme mantığı / verileri göndermek yerine görünümün oluşturduğu verileri döndürmesini tercih ediyorum.
Rick

1
JSF'nin HTML üzerinde güçlü kontrole sahip sunucu tarafı olduğunu kabul ediyorum.
Plain_Dude_Sleeping_Alone

28

JSF, java mağazalarının jQuery gibi şeyler öğrenmek ve karmaşık JS oluşturmak zorunda kalmaması, bunun yerine tamamen Java yığınına odaklanması için oluşturuldu. Zamanın para olduğu bir dünyada ve zaten Java geliştirmeye odaklanan birçok yerde, yığındaki bir dil / parça eksik, eğitimi ve bakımı daha hızlı ve dolayısıyla daha ucuz hale getirir.

JavaScript'in büyük ekipler için bir bakım kabusu haline gelmesinin kolay olduğunu ekleyeceğim, özellikle projedeki bazı geliştiriciler çok fazla web meraklısı değilse.


Yani JQuery JS vb. Konusunda oldukça rahatsam, JSF'ye konsantre olmam gerekmiyor mu?
sushil bharwani

2
Her şey, çözmeye çalıştığınız soruna ve hangi ekiple çözdüğünüze bağlıdır.
Andrew White

1
Takım konusunda aynı fikirdeyim, ancak JSF'nin hangi farklı problemleri çözebileceğini ve js jQuery'nin vb. Çözemediğini öğrenmekle ilgileniyorum. Sadece JSF'yi öğrenmek için motivasyon oluşturmaya çalışıyorum.
sushil bharwani

1
Yok, sadece aynı sorunları çözmek için farklı bir yol sağlar .
Andrew White

8
JQuery ile gerçekten rahat olsanız bile, JSF hala gerçekten yararlıdır. Sunucu tarafı kodunu istemci tarafı gösterimlerine bağlamanın kolay bir yolunu sağlar. Bazı Facelets 'bileşik bileşenleri', HTML ve JS (JQuery dahil) etrafında yalnızca oldukça ince bir sarmalayıcıdır. Oluşturmaları çok kolaydır ve genel olarak tüm istemci-sunucu tarafı bağlantısını daha kolay hale getirir.
Arjan Tijms

23

Javascript ve jQuery gibi çerçevelerle tam esnekliğe ve tam kontrole sahip olursunuz. Ext'ler vb. İle çok fazla kontrolü kaybedersiniz ve çerçeveye uyum sağlamalısınız. JSF ile kontrolü tamamen kaybedersiniz ve çerçeveye tamamen uyum sağlamalısınız. Yaşam döngüleri vb.'de çağrılırsınız ve nihayet sunucuya ne zaman çağrı yapılacağı ve nerede yapılamayacağı konusunda hiçbir kontrole sahip değilsiniz. 'Özel' kabul edilen bir şey yapacaksanız, çok zor durumdasınız. Ve JSF dünyasında, çok sütunlu tablo sıralaması veya yalnızca sınırlı sayıda karakter yazabileceğiniz alanlar (sayı alanı gibi) gibi temel şeyler bile 'özel' olarak kabul edilir.

Ancak, ne kadar esnek olursanız, o kadar fazla hata veya kötü uygulama yapabilirsiniz. Yüksek esneklik yalnızca son derece zeki programcılar ile çalışır, diğerleri projeyi yönetilemez bir kabusa çevirir.

Ancak, JSF ve sınırlı esnekliği sayesinde, bir şeyi yapmanın her zaman yalnızca birkaç (veya hatta bir) doğru yolu vardır. Çok sınırlısınız, kısayollar yapamazsınız, daha fazla XML yazmanız gerekir, vs. - ancak standarda uyum sağlarken, deneyimsiz veya düşük vasıflı programcıların üreteceği kod üzerinde daha iyi kontrol vardır. Sonuç olarak, büyük şirketler JSF'yi seviyor çünkü onlar için daha güvenli.

GWT'den JSF'ye geçtiğimde şok oldum, benim için doğal olan kaç şey oldukça alışılmadık görüldü ve ne kadar basit şeylere ulaşmak bu kadar zordu. Dahası, GWT / jQuery destekli uygulamada etiket üreten bir işlevi değiştiren etiketten sonra ':' işareti eklemek gibi en küçük değişiklikleri yapmak bile yerelleştirilmiş özelliklere sahip düzinelerce dosyanın değiştirilmesini gerektirdi ki bu bile dikkate alınmadı. benden başka kimse garip ...


7
PrimeFaces, jQuery tabanlıdır, bu nedenle istemci tarafında çok fazla esnekliğe sahipsiniz, ayrıca PrimeFaces bileşenleri, özelleştirmeniz için olay geri aramaları olarak istemci ve sunucu tarafında birçok kanca sağlar. Javascript API'leri geçersiz kılınabilir ve CSS'nin yanı sıra özelleştirilmiş görünüm için kullanılabilir. : label, daha jQuery dostu bir karakter için global olarak web.xml'de yapılandırılabilir.
Çağatay Civici

1
Kabul. Genel kural şudur: Hiçbir çerçeve kullanmak, gelişmiş javascript programlama gerektirir ve sürdürülmesi zor olacaktır, ancak önemli ölçüde daha fazla güç ve karmaşıklığa izin verirken, çerçevelere güvenmek daha kolay olacak, ancak uygulamanın potansiyel kapasitesini sınırlayacaktır.
KTys

10

JSF kullanmanın faydaları yalnızca xhtml + css + js oluşturmada değildir. Bazen JSF, herhangi bir bileşen tabanlı çerçeve gibi oluşturabileceğiniz işaretlemeye bir kısıtlama getirir. Ancak JSF sadece bunun için değil, yaşam biçimi de büyük ölçüde yardımcı oluyor. Girdiyi doğruladıktan sonra modeli güncelleyebilir ve sunucu tarafı çekirdeklerinizi herhangi bir çaba harcamadan senkronize edebilir. "Burada kullanıcı ne yazarsa yazsın, bir sayı olup olmadığını kontrol edin, eğer öyleyse, XX nesnesinde YY özelliğinde saklayın" diyorsunuz ve JSF hepsini yapacaktır.

Yani evet, JQuery, JS, vb. Kullanmaya devam edebilirsiniz. Ancak JSF, sunucu tarafı kodu yazma konusunda birçok fayda sağlar ve sizi birçok kazan plakasından kurtarır.


9

Jsf'nin herhangi bir şey eklediğine kesinlikle katılmıyorum. Sadece ek yükler ekler. Sunucuda kullanıcı arabirimi yapmak, şimdiye kadar duyduğum en saçma şey. Ve büyük ekiplerdeki javascript harika çalışıyor - buna yeniden kullanma kodu denir.

Sadece jquery'yi bazı jsp etiketlerine sarın, ihtiyacınız olan tek şey bu ve işiniz bitti ve .jsf ve richfaces ile. Zincirleme ve ölçeklenebilirlik sorunlarına katlanmayın.


14
JSF, form tabanlı uygulamalara yöneliktir. jQuery güzeldir (heck, PrimeFaces, RichFaces ve IceFaces gibi pek çok popüler JSF bileşen kitaplığı onu kapakların altında bile kullanıyor), ancak jQuery, sunucu tarafında form gönderimlerinin işlenmesini hiçbir şekilde basitleştirmiyor. Düz JSP / Servlet kullanmak sadece berbat bir standart kodla sonuçlanacaktır. Yine, JSF sadece HTML / CSS / JS değil, aynı zamanda JSP / Servlet'tir.
BalusC

2
Genel olarak JSF ve özellikle bir JSF sayfasının yaşam döngüsü hakkında daha fazla okursanız fikrinizi değiştirebileceğinizi düşünüyorum. Sonra tekrar, yapmayabilirsiniz.
Ahmed Anwar

5

JSF, Spring MVC, Struts, Grails, JQuery ve ExtJS ile çalıştıktan sonra, bence Grails + ExtJS güçlü bir kombinasyondur.

Grails'i her gün JSF yerine seçerdim. ExtJS'nin istemci tarafı çerçevesi ve kitaplığı olarak bütünlüğünü seviyorum, ancak JQuery'den daha dik bir öğrenme eğrisi ile geliyor.


3

JQuery ve JSF arasındaki en büyük farklar şunlardır:

  • MVC mimarisi yok
  • durum kontrolü yok (tarihi oturumda veya konuşmada kaydetme, otomatik temizleme vb.)
  • (varsayılan) doğrulama kitaplığı yok
  • şablon kütüphanesi yok
  • gelişmiş gezinme / yönlendirme yok
  • müşteri tarafı

jQuery hiçbir zaman tam yığın web çerçevesi olarak kullanılmak üzere tasarlanmamıştır. Daha çok düşük seviyeli JS kodunu değiştirmek için tasarlandı, böylece JS yazımı daha az kod satırında daha kolay ve daha güçlü hale geldi.

Ve bu nedenle çoğunlukla HTML öğelerine davranış eklemek için kullanılmalıdır.


2

ExtJS çerçevesini büyük bir web uygulaması için kullandım, kullanımının ne kadar kolay olduğunu biliyorum. ExtJS (Schena), MVC mimarisindeki (Oracle 11g) veritabanı etkileşimleri için en uygunudur. Görünüm görsel / kullanıcı etkileşimleri içindi. Denetleyici, PLSQL paketlerinden (CRUD için API, SQL seçme sorguları vb.) 'İşleme' ve kullanılması gereken tetikleyicileri belirtti. Model ve saklama dosyaları, veri öğelerini Görüntüleyici / girdilere 'eşlemek' için kullanıldı.

ExtJS, Angular JS'nin daha uygun olabileceği veritabanı yoğun olmayan web arayüzleri için uygun değildir.

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.