Osobiście skorzystałbym z Opcji # 2. Chociaż wiem, że bardzo możliwe jest rozwiązanie problemu za pomocą EL i ponowne wykorzystanie w dokumentach xhtml za pomocą funkcji lub interfejsu użytkownika: params, naprawdę wydaje się, że brakuje przenośności, łatwości konserwacji i testowania implementacji bean Java.
Jeśli programista posługuje się biegle zarówno językiem EL, jak i Javą i posiada zarówno komponenty Xhtml, jak i Java, nie ma sensu używać EL do DOWOLNEJ oceny warunkowej o rozmiarze> 1.
Wydaje się, że implementacja po stronie Java ma zbyt wiele zalet:
- Możliwość oparcia się na kompilatorze IDE +
- Używaj stałych lub wyliczeń (dla „psa” i „szczekania”), są szanse, że są one używane w innym miejscu w kodzie również do porównań ... jeśli zmienia się wartość ciągu, to naprawdę fajnie jest ręcznie wymieniać każde jej wystąpienie w podstawa kodu
- Zamiast przechodzić do odpowiedniej strony z odpowiednimi danymi, mogę ćwiczyć logikę za pomocą testów jednostkowych
Jednym z głównych argumentów, które słyszałem (poza Stack) na korzyść Opcji 1, jest:
„O wiele łatwiej jest zobaczyć, kiedy komponent renderuje, jeśli zachowasz tę logikę w widoku”.
Przekonałem się, że może tak być w przypadku aplikacji na początkowym etapie życia, w której jest ona lżejsza i mniej skomplikowana. Jednak stosowanie tej praktyki na większą skalę i w miarę dojrzewania mniejszej aplikacji może spowodować, że szczury staną się warunkowe i mogą stać się koszmarem do utrzymania. Oto kilka przykładów podobnych do tego, co widziałem na wolności:
<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}"
/>
Lub mój ulubiony, używając wielu komponentów z warunkami renderowania, które wykluczają się, aby reprezentować różne wartości, które mogą być wyświetlane:
<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'}"/>
Czy można wyświetlić do 4 tekstów jednocześnie? Na pierwszy rzut oka nie można powiedzieć, konieczne będzie sprawdzenie każdego warunku. Na marginesie, zdaję sobie sprawę, że ten przykład jest również kiepskim projektem, ponieważ można je umieścić w ac: wybierz ... ale widziałem to wcześniej.
Na koniec dnia jest to teoretycznie logika „podglądu”, ponieważ określa ona, co faktycznie zostanie wyświetlone, więc istnieje argument koncepcyjny, który powinien znajdować się w pliku xhtml. Problem, który znalazłem, polega na tym, że włączenie takiej logiki w szablonie widoku może znacznie utrudnić zrozumienie układu na dłuższą metę i jeszcze nie widziałem, aby ta metoda rozwiązania problemu miała jakąkolwiek realną korzyść w porównaniu z użyciem Javy wdrożenie fasoli.
barking animals
spowodowałbym wywołanie tej metody, ponieważ ona już istnieje. Jeśli używasz logiki widoku na wielu stronach, możesz zbudować z niej funkcję el.