Khi tôi viết các ứng dụng web Java, tôi thường sử dụng các thẻ JSTL. Tôi nghĩ rằng các thẻ này là tuyệt vời, ngoại trừ một điều làm tôi bực mình: trong khi ngôn ngữ biểu thức cho phép bạn truy cập các thuộc tính bean, nó không cho phép bạn gọi các phương thức của nó.Các cuộc gọi phương thức trong EL
Trong bản phát hành 1.0, thậm chí không thể lấy độ dài của chuỗi hoặc số phần tử trong bộ sưu tập. Kể từ phiên bản 1.1, fn: chức năng chiều dài đã được thêm vào, vì vậy bạn có thể làm những việc như thế này:
...
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<c:if test="${fn:length(str) > 10}">
...
</c:if>
...
Đó là tiết hơn và xấu xí hơn (IMHO đó là) hơn:
...
<c:if test="${str.length() > 10}">
...
</c:if>
...
Nó cho thấy rằng JSTL 2.0 sẽ cho phép bạn định nghĩa các hàm mới, nhưng bạn sẽ cần phải viết một lớp đặc biệt cho mục đích đó, trong đó bạn sẽ định nghĩa các phương thức (tĩnh) của bạn, và bạn cũng cần phải viết một tệp TLD sẽ được bao gồm trong mỗi jsp sẽ sử dụng các chức năng này.
Cho dù bạn xác định chức năng tùy chỉnh hoặc bạn sử dụng cách giải quyết khác, bạn có nhiều mã bổ sung để viết.
Tôi đã đọc ở đâu đó rằng JCP đã tự nguyện không cho phép gọi phương thức từ ngôn ngữ biểu thức.
Bất kỳ ai trong các bạn có thể giúp tôi hiểu tại sao JCP lại làm điều này cho chúng tôi?
Đây là cái gì đó đã luôn luôn hoàn toàn nướng mì của tôi. Không thể hiểu tại sao điều này không thể được cho phép trong EL –