5

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が私たちにこれをやっているのか、誰か理解してもらえますか?

4

4 に答える 4

4

JCPが私たちにこれを行っている理由を理解するのを手伝ってくれる人はいますか?

これは、Javaプログラマーの特定のサブセットの束縛と規律の考え方の一部であり、誰もがアプリケーションを作成する必要がある1つの真の方法を知っています。

テンプレートを作成するときにフルパワーの言語を自由に使用できると信頼することはできません。これは、ひどい、不格好なPHPコーダーのように、ビジネスロジックとプレゼンテーションを混同するために悪用する可能性があるためです。ええと、想像してみてください!

プログラマーは敵であり、悪を行うことを防ぐ必要があります。プログラマーは実際にはあなたが何かをデバッグしようとしているだけであるか、アプリを一時的に実行するために簡単なハックを入れていることがわかるかもしれません。または、プレゼンテーションロジックなどがあることが判明する場合があります。そのようなものを、アプリケーション内の一連のタグクラスとBeanクラスに移動させることは、他の方法と同じように不快です。

しかし、それは問題ではありません!Javaの純潔を守るという目的を果たすためにあなたに迷惑をかける価値は十分にあります。

[スナークは申し訳ありませんが、それはすでにかなりの怒りの質問でした。]

PS。私が思うにGroovyは常にあります。

于 2009-03-28T23:30:15.140 に答える
3

必要な機能はJSR 245で定義されています(詳細はこちら)。今すぐ必要な場合は、UEL プロジェクトまたは代替実装 ( JUEL など) からダウンロードしてください。標準の一部になるのを待つ必要がある場合は、JEE6 に含まれます。それまでは...まあ、あなたはすでに選択肢を知っています。

于 2009-03-28T14:24:19.787 に答える
2

Seamをご覧ください!Seamにより、ELは本来あるべき姿になりました。パラメータを使用してもメソッドを呼び出すのは簡単です。

于 2009-03-29T12:39:20.687 に答える
0

StringTemplateのように、モデルとビューを厳密に分離することが目標であると思います。

アイデアは非常に単純です。メソッドにアクセスできない場合は、コントローラーですべてのデータを計算し、ビューでフォーマットする必要があります。もちろん、彼らは関数へのアクセスを許可することでメッセージを混乱させましたが、Java でタプルのマップのリスト (つまり、クラスのない構造化データ) を作成するのは、Java でのように簡単ではないという事実に助けられませんでした。パイソン、ルビーなど

とにかく、任意のメソッドを呼び出すことができるタグの作成に関する記事があります。参考になるかもしれません。

于 2009-03-28T12:19:29.433 に答える