Secara pribadi, saya akan menggunakan Opsi # 2. Meskipun saya tahu sangat mungkin untuk menyelesaikan masalah menggunakan EL dan mendapatkan sedikit penggunaan kembali di seluruh dokumen xhtml menggunakan fungsi atau ui: params tampaknya benar-benar kurang portabilitas, rawatan dan testabilitas dari implementasi Java bean.
Jika pengembang fasih dalam EL dan Java dan memiliki kedua xhtml dan kacang Jawa, tampaknya tidak masuk akal untuk menggunakan EL untuk melakukan evaluasi bersyarat APAPUN dengan ukuran> 1.
Tampaknya ada terlalu banyak manfaat untuk diterapkan di sisi Jawa:
- Kemampuan untuk bersandar pada IDE + compiler
- Gunakan konstanta atau enum (untuk "anjing" dan "kulit"), kemungkinan mereka sedang digunakan di tempat lain dalam kode untuk perbandingan juga ... jika nilai String berubah itu benar-benar menyenangkan harus secara manual mengganti setiap kejadian di seluruh basis kode
- Daripada harus menavigasi ke halaman yang bersangkutan dengan data yang sesuai, saya dapat menggunakan logika menggunakan unit test
Salah satu argumen utama yang saya dengar (di luar Stack) yang mendukung Opsi 1 adalah:
"Jauh lebih mudah untuk melihat kapan suatu komponen merender jika Anda tetap menggunakan logika ini."
Saya telah menemukan bahwa ini mungkin menjadi kasus untuk aplikasi pada tahap awal kehidupannya di mana beratnya lebih ringan dan tidak terlalu rumit. Namun menerapkan praktik ini pada skala yang lebih besar dan sebagai aplikasi yang lebih kecil matang dapat menyebabkan sarang tikus kondisi dan menjadi mimpi buruk untuk dipertahankan. Berikut adalah beberapa contoh yang mirip dengan apa yang saya lihat di alam liar:
<h:outputText value="grrr"
render="#{animal.type == 'dog' or animal.type == 'cat' or animal.type == 'horse'
or animal.type == 'pony' or animal.type == 'mule' or animal.type == 'lion'
or animal.type == 'tiger' or (animal.type == 'bird'
and animal.subType == 'macaw') or .... continue this for another line or two}"
/>
Atau favorit saya, menggunakan beberapa komponen dengan kondisi render yang eksklusif satu sama lain untuk mewakili nilai yang berbeda yang dapat ditampilkan:
<h:outputText value="grr" render="#{theMonstrosityFromPreviousExample} />
<h:outputText value="cry"
render="#{animal.type == 'human' and animal.subType == 'baby'}" />
<h:outputText value="yo"
render="#{animal.type == 'human' and animal.subType == 'teenager'}" />
<h:outputText value="hello"
render="#{animal.type == 'human' and animal.subType == 'adult'}"/>
Bisakah hingga 4 teks ditampilkan sekaligus? Pada pandangan pertama Anda tidak tahu, pemeriksaan setiap kondisi akan diperlukan. Sebagai catatan saya menyadari contoh ini juga desain yang buruk, karena ini dapat dimasukkan ke dalam ac: pilih ... tapi saya pernah melihat ini sebelumnya.
Pada akhirnya, ini masih secara teoritis 'melihat' logika karena menentukan apa yang sebenarnya ditampilkan sehingga ada argumen konseptual yang harus dijalani dalam xhtml. Masalah yang saya temukan adalah bahwa termasuk logika seperti ini dalam template tampilan dapat membuat tata letak lebih sulit untuk dipahami dalam jangka panjang dan saya belum melihat bahwa metode penyelesaian masalah ini memiliki manfaat nyata dibandingkan menggunakan Java implementasi kacang.
barking animals
saya akan memanggil metode itu, karena sudah ada. Jika ini tampilan logika yang Anda gunakan di banyak situs, Anda bisa membangun fungsi el dari situ.