Java Web アプリケーションを作成するときは、通常 JSTL タグを使用します。これらのタグは素晴らしいと思いますが、私を怒らせる 1 つの点を除けば、式言語では Bean のプロパティにアクセスできますが、そのメソッドを呼び出すことはできません。
リリース 1.0 では、文字列の長さやコレクション内の要素の数を取得することさえできませんでした。リリース 1.1 では、fn:length 関数が追加されているため、次のようなことができます。
...
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<c:if test="${fn:length(str) > 10}">
...
</c:if>
...
どちらがより冗長で醜いですか(私見です):
...
<c:if test="${str.length() > 10}">
...
</c:if>
...
JSTL 2.0 では新しい関数を定義できるようになりますが、(静的) メソッドを定義するクラスをその目的専用に作成する必要があり、TLD ファイルも作成する必要があります。これらの関数を使用するすべての jsp に含まれています。
カスタム関数を定義する場合でも、別の回避策を使用する場合でも、多くの追加コードを作成する必要があります。
JCP が自発的に式言語からのメソッドの呼び出しを禁止したという記事をどこかで読んだことがあります。
なぜJCPが私たちにこれをやっているのか、誰か理解してもらえますか?