Şahsen, Seçenek # 2'yi kullanırdım. Ben EL kullanarak sorunu çözmek ve fonksiyonları veya ui: xms kullanarak xhtml belgelerde biraz yeniden kullanmak çok mümkün olduğunu biliyorum olsa da, Java fasulye uygulaması taşınabilirlik, sürdürülebilirlik ve test edilebilirlik eksikliği gibi görünüyor.
Bir geliştirici hem EL hem de Java'da akıcıysa ve hem xhtml hem de Java çekirdeklerine sahipse,> 1 boyutunda HERHANGİ BİR koşullu değerlendirme yapmak için EL'i kullanmak çok mantıklı görünmemektedir.
Java tarafında uygulamanın çok fazla faydası var gibi görünüyor:
- IDE + derleyicisine yaslanabilme
- Sabitleri veya enumları kullanın ("köpek" ve "havlama" için), karşılaştırmalar için kodun başka bir yerinde de kullanılıyor olabilirler ... String değeri değişirse, kod tabanı
- Söz konusu sayfaya uygun verilerle gitmek yerine birim testleri kullanarak mantık uygulayabilirim
Seçenek 1 lehine (Stack dışında) duyduğum ana argümanlardan biri:
"Bu mantığı görünümde tutarsanız bir bileşenin ne zaman oluşturulduğunu görmek çok daha kolay."
Bunun hayatının ilk aşamasında daha hafif ve daha az karmaşık olduğu bir uygulama için geçerli olabileceğini buldum. Bununla birlikte, bu uygulamayı daha büyük bir ölçekte uygulamak ve daha küçük bir uygulama olgunlaştıkça, bir sıçan koşullu yuvaya neden olabilir ve bakımı kabus haline gelebilir. İşte benim vahşi doğada gördüklerime benzer birkaç örnek:
<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}"
/>
Ya da benim favorim, görüntülenebilecek farklı değerleri temsil etmek için birbirinden ayrı oluşturma koşullarına sahip birden fazla bileşen kullanma:
<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'}"/>
Aynı anda en fazla 4 metin görüntülenebilir mi? İlk bakışta söyleyemezsiniz, her bir durumun kontrol edilmesi gerekecektir. Bir yan not olarak, bu örneğin aynı zamanda kötü bir tasarım olduğunu anlıyorum: bunlar ac olarak konabilir: seçin ... ama bunu daha önce görmüştüm.
Günün sonunda bu, teorik olarak 'görüntüleme' mantığıdır çünkü gerçekte neyin görüntüleneceğini belirler, bu nedenle xhtml'de yaşaması gereken kavramsal bir argüman vardır. Bulduğum sorun, görünüm şablonuna böyle bir mantık dahil etmenin uzun vadede anlaşılmasını çok daha zor hale getirebileceği ve bu sorunu çözmenin bu yönteminin Java'yı kullanmanın gerçek bir faydası olduğunu henüz görmedim. fasulye uygulaması.
barking animals
varsa, çünkü zaten var olduğundan, bu yöntemi çağırmak istiyorum. Birden fazla sitede kullandığınız bir görünüm mantığı ise, ondan bir el işlevi oluşturabilirsiniz.