Cá nhân, tôi sẽ sử dụng Tùy chọn # 2. Mặc dù tôi biết rằng rất có thể giải quyết vấn đề bằng EL và có được một chút sử dụng lại trên các tài liệu xhtml bằng các hàm hoặc ui: params dường như thực sự thiếu tính di động, khả năng duy trì và khả năng kiểm tra của việc triển khai Java bean.
Nếu một nhà phát triển thông thạo cả EL và Java và sở hữu cả hai hạt xhtml và Java, thì dường như không có ý nghĩa gì khi sử dụng EL để thực hiện bất kỳ đánh giá có điều kiện nào với kích thước> 1.
Dường như có quá nhiều lợi ích khi triển khai ở phía Java:
- Khả năng dựa vào trình biên dịch IDE +
- Sử dụng các hằng hoặc enum (cho "dog" và "bark"), rất có thể chúng đang được sử dụng ở nơi khác trong mã để so sánh ... nếu giá trị String thay đổi, thật vui khi phải thay thế thủ công mọi thứ trên nó cơ sở mã
- Thay vì phải điều hướng đến trang được đề cập với dữ liệu phù hợp, tôi có thể thực hiện logic bằng các bài kiểm tra đơn vị
Một trong những đối số chính mà tôi đã nghe (bên ngoài Stack) có lợi cho Tùy chọn 1 là:
"Sẽ dễ dàng hơn nhiều khi nhìn thấy một thành phần biểu hiện nếu bạn giữ logic này trong chế độ xem."
Tôi đã thấy rằng đây có thể là trường hợp của một ứng dụng trong giai đoạn đầu của cuộc sống khi nó có trọng lượng nhẹ hơn và ít phức tạp hơn. Tuy nhiên, áp dụng thực hành này ở quy mô lớn hơn và khi một ứng dụng nhỏ hơn đáo hạn, nó có thể khiến một tổ chuột có điều kiện và trở thành một cơn ác mộng để duy trì. Dưới đây là một vài ví dụ tương tự như những gì tôi đã thấy ngoài tự nhiên:
<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}"
/>
Hoặc sở thích của tôi, sử dụng nhiều thành phần có điều kiện kết xuất không thuộc về nhau để thể hiện các giá trị khác nhau có thể được hiển thị:
<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'}"/>
Có thể hiển thị tối đa 4 văn bản cùng một lúc? Thoạt nhìn bạn không thể biết, việc kiểm tra từng điều kiện sẽ là cần thiết. Như một lưu ý phụ tôi nhận ra ví dụ này cũng là thiết kế kém, vì chúng có thể được đặt trong ac: select ... nhưng tôi đã thấy điều này trước đây.
Vào cuối ngày, đây vẫn là logic 'xem' về mặt lý thuyết vì nó xác định những gì thực sự được hiển thị để có một đối số khái niệm nên tồn tại trong xhtml. Vấn đề mà tôi đã tìm thấy là việc bao gồm logic như thế này trong mẫu khung nhìn có thể khiến bố cục khó hiểu hơn về lâu dài và tôi vẫn chưa thấy rằng phương pháp giải quyết vấn đề này mang lại bất kỳ lợi ích thực sự nào khi sử dụng Java đậu thực hiện.
barking animals
thì tôi sẽ gọi phương thức đó vì nó đã tồn tại. Nếu đó là logic xem bạn sử dụng trên nhiều trang web, bạn có thể xây dựng hàm el từ nó.