Kerugian JSF 2.0? Jujur, terlepas dari kurva pembelajaran yang relatif curam ketika Anda tidak memiliki latar belakang pengetahuan yang kuat tentang Pengembangan Web dasar (HTML / CSS / JS, sisi server versus sisi klien, dll) dan Java Servlet API dasar (permintaan / respons / sesi , penerusan / pengalihan, dll), tidak ada kerugian serius yang terlintas dalam pikiran. JSF dalam rilisnya saat ini masih perlu menyingkirkan citra negatif yang diperolehnya sejak usia dini, di mana ada beberapa kelemahan serius.
JSF 1.0 (Maret 2004)
Ini adalah rilis awal. Itu berantakan dengan bug di kedua inti dan bidang kinerja yang Anda tidak ingin tahu. Aplikasi web Anda tidak selalu berfungsi seperti yang Anda harapkan secara intuitif. Anda sebagai pengembang akan lari menangis.
JSF 1.1 (Mei 2004)
Ini adalah rilis bugfix. Performa itu masih belum banyak membaik. Ada juga satu kelemahan utama: Anda tidak bisa inline HTML di halaman JSF dengan sempurna. Semua plain vanilla HTML get diberikan sebelum pohon komponen JSF. Anda perlu membungkus semua vanilla polos dalam <f:verbatim>
tag sehingga mereka bisa dimasukkan dalam pohon komponen JSF. Meskipun ini sesuai spesifikasi, ini telah menerima banyak kritik. Lihat juga ao JSF / Facelets: mengapa bukan ide yang baik untuk mencampur JSF / Facelets dengan tag HTML?
JSF 1.2 (Mei 2006)
Ini adalah rilis pertama dari tim pengembangan JSF baru yang dipimpin oleh Ryan Lubke. Tim baru melakukan banyak pekerjaan hebat. Ada juga perubahan dalam spesifikasi. Perubahan besar adalah peningkatan penanganan tampilan. Ini tidak hanya sepenuhnya JSF terpisah dari JSP, sehingga orang dapat menggunakan teknologi tampilan yang berbeda dari JSP, tetapi juga memungkinkan pengembang untuk inline plain vanilla HTML di halaman JSF tanpa harus repot dengan <f:verbatim>
tag. Fokus utama lain dari tim baru adalah meningkatkan kinerja. Selama masa pakai Implementasi Referensi JSF Sun 1.2 (yang diberi nama kode Mojarra sejak build 1.2_08, sekitar 2008), secara praktis setiap build dikirimkan dengan peningkatan kinerja (utama) di samping perbaikan bug biasa (minor).
Satu-satunya kelemahan serius dari JSF 1.x (termasuk 1.2) adalah tidak adanya ruang lingkup di antara ruang lingkup permintaan dan sesi , yang disebut ruang lingkup percakapan . Hal ini memaksa pengembang untuk repot dengan elemen input tersembunyi, permintaan DB yang tidak perlu dan / atau menyalahgunakan ruang lingkup sesi setiap kali seseorang ingin menyimpan data model awal dalam permintaan berikutnya untuk berhasil memproses validasi, konversi, perubahan model, dan undangan tindakan di lebih banyak aplikasi web yang kompleks. Rasa sakit dapat dilunakkan dengan mengadopsi perpustakaan pihak ke-3 yang menyimpan data yang diperlukan dalam permintaan berikutnya seperti komponen MyFaces Tomahawk <t:saveState>
, cakupan percakapan JBoss Seam dan MyFaces Orchestra kerangka percakapan.
Kerugian lain untuk puritan HTML / CSS adalah bahwa JSF menggunakan titik dua :
sebagai karakter pemisah ID untuk memastikan keunikan elemen HTML id
dalam output HTML yang dihasilkan, terutama ketika suatu komponen digunakan kembali lebih dari satu kali dalam tampilan (templating, iterating komponen, dll) . Karena ini adalah karakter ilegal dalam pengidentifikasi CSS, Anda harus menggunakannya \
untuk keluar dari titik dua dalam penyeleksi CSS, menghasilkan penyeleksi yang jelek dan aneh seperti #formId\:fieldId {}
atau bahkan #formId\3A fieldId {}
. Lihat juga Bagaimana cara menggunakan ID elemen HTML yang dihasilkan JSF dengan titik dua ":" di pemilih CSS? Namun, jika Anda bukan purist, baca juga secara default, JSF menghasilkan id yang tidak dapat digunakan, yang tidak kompatibel dengan css bagian dari standar web .
Juga, JSF 1.x tidak mengirim dengan fasilitas Ajax di luar kotak. Bukan kelemahan teknis, tetapi karena hype Web 2.0 selama periode itu, itu menjadi kelemahan fungsional. Exadel lebih awal memperkenalkan Ajax4jsf, yang dikembangkan secara menyeluruh selama bertahun-tahun dan menjadi bagian inti dari pustaka komponen JBoss RichFaces . Pustaka komponen lain juga dikirimkan dengan kekuatan Ajax, yang terkenal adalah ICEfaces .
Sekitar setengah dari masa pakai JSF 1.2, sebuah teknologi tampilan berbasis XML baru diperkenalkan: Facelets . Ini menawarkan keuntungan besar di atas JSP, terutama di bidang templating.
JSF 2.0 (Juni 2009)
Ini adalah rilis besar kedua, dengan Ajax sebagai kata kunci. Ada banyak perubahan teknis dan fungsional. JSP digantikan oleh Facelet karena teknologi tampilan default dan Facelet diperluas dengan kemampuan untuk membuat komponen khusus menggunakan XML murni ( komponen komposit yang disebut ). Lihat juga Mengapa Facelets lebih disukai daripada JSP sebagai bahasa definisi tampilan dari JSF2.0 dan seterusnya?
Kekuatan Ajax diperkenalkan dalam rasa <f:ajax>
komponen yang memiliki banyak kesamaan dengan Ajax4jsf. Anotasi dan peningkatan konvensi-konfigurasi diperkenalkan untuk membunuhfaces-config.xml
file verbose sebanyak mungkin. Selain itu, karakter pemisah ID penampung kontainer default :
menjadi dapat dikonfigurasi, sehingga pembuat HTML / CSS dapat bernafas lega. Yang perlu Anda lakukan adalah untuk mendefinisikannya sebagai init-param
di web.xml
dengan nama javax.faces.SEPARATOR_CHAR
dan memastikan bahwa Anda tidak menggunakan karakter diri Anda di mana saja di klien ID, seperti -
.
Terakhir tetapi tidak kalah pentingnya, ruang lingkup baru diperkenalkan, ruang lingkup tampilan . Ini menghilangkan kelemahan utama JSF 1.x lainnya seperti yang dijelaskan sebelumnya. Anda cukup mendeklarasikan kacang @ViewScoped
untuk mengaktifkan cakupan percakapan tanpa mengganggu semua cara untuk mempertahankan data dalam permintaan (percakapan) selanjutnya. Sebuah @ViewScoped
kacang akan hidup selama Anda kemudian mengirimkan dan navigasi ke pandangan yang sama (independen dari membuka tab browser / jendela!), Baik serentak atau asynchronous (Ajax). Lihat juga Perbedaan antara ruang lingkup Tampilan dan Permintaan dalam kacang yang dikelola dan Bagaimana memilih ruang lingkup kacang yang tepat?
Meskipun praktis semua kelemahan JSF 1.x dihilangkan, ada bug spesifik JSF 2.0 yang mungkin menjadi penghenti. The @ViewScoped
gagal dalam penangan tag karena masalah ayam-telur dalam tabungan negara parsial. Ini diperbaiki di JSF 2.2 dan di-backport di Mojarra 2.1.18. Juga melewati atribut khusus seperti HTML5data-xxx
tidak didukung. Ini diperbaiki di JSF 2.2 oleh fitur elemen / atribut passthrough baru. Lebih lanjut implementasi JSF, Mojarra memiliki masalah tersendiri . Relatif banyak dari mereka terkait dengan perilaku kadang<ui:repeat>
- kadang tidak intuitif , implementasi tabungan negara parsial dan lingkup flash yang diimplementasikan dengan buruk . Sebagian besar dari mereka diperbaiki dalam versi Mojarra 2.2.x.
Sekitar waktu JSF 2.0, PrimeFaces diperkenalkan, berdasarkan jQuery dan jQuery UI. Itu menjadi perpustakaan komponen JSF paling populer.
JSF 2.2 (Mei 2013)
Dengan diperkenalkannya JSF 2.2, HTML5 digunakan sebagai kata kunci walaupun secara teknis ini hanya didukung di semua versi JSF yang lebih lama. Lihat juga dukungan JavaServer Faces 2.2 dan HTML5, mengapa XHTML masih digunakan . Fitur JSF 2.2 baru yang paling penting adalah dukungan untuk atribut komponen kustom, dengan ini membuka dunia kemungkinan, seperti grup tombol radio yang dapat disesuaikan .
Terlepas dari implementasi bug spesifik dan beberapa "hal-hal kecil yang mengganggu" seperti ketidakmampuan untuk menyuntikkan EJB di validator / converter (sudah diperbaiki di JSF 2.3), tidak ada kelemahan utama dalam spesifikasi JSF 2.2.
MVC berbasis komponen vs MVC berbasis permintaan
Beberapa mungkin memilih bahwa kelemahan utama JSF adalah memungkinkan sangat sedikit kendali atas HTML / CSS / JS yang dihasilkan. Itu bukan milik JSF, itu hanya karena itu adalah kerangka kerja MVC berbasis komponen , bukan kerangka kerja MVC berdasarkan permintaan (tindakan) . Jika tingkat tinggi mengendalikan HTML / CSS / JS adalah persyaratan utama Anda ketika mempertimbangkan kerangka kerja MVC, maka Anda seharusnya sudah tidak melihat kerangka kerja MVC berbasis komponen, tetapi pada kerangka kerja MVC berbasis permintaan seperti Spring MVC . Anda hanya perlu mempertimbangkan bahwa Anda harus menulis sendiri semua HTML / CSS / JS boilerplate. Lihat juga Perbedaan antara Permintaan MVC dan Komponen MVC .
Lihat juga: