0

これがjspの私のコードです:

<script>  
var myArray = [];
</script>
    <c:forEach var="attributes" items="FROMthisBEAN"  varStatus="vStatus" >  
                <script>
                 //Executes for each iteration. Do something COOL.
                 myArray.push("Something from this iteration");
                </script>
    </c:forEach>

ここで、次のことを考慮してください。

<script>  
    var myArray = [];    
        <c:forEach var="attributes" items="FROMthisBEAN"  varStatus="vStatus" >  
                    myArray.push("Something from this iteration");
        </c:forEach>
 </script>
<c:forEach var="attributes" items="FROMthisBEAN"  varStatus="vStatus" >  
                //Executes for each iteration. Do something COOL.
</c:forEach>

両方のコードで同じ出力が得られます。
問題は、パフォーマンスに関してはどちらが優れているかです。
最初のケースでは、c:forEach 内のスクリプト タグが何度も繰り返されます。
しかし、2 番目のケースでは、JSP に既に存在する c:forEach をもう 1 つ作成しています。
ここで完全に失われました。お知らせ下さい。

4

1 に答える 1

2

<script>それらを個別のタグに入れる必要はまったくありません。本当に改善したい場合は、一連の「push()」呼び出しの代わりに、JavaScript 配列リテラルを作成することを検討する必要があります。Java 配列を JSON としてレンダリングするための JSP 拡張機能は、このトリックを実行します。

編集— 詳しく説明すると、JSTL 関数として利用できるようになった JSON エンコーダーを使用すると、次のように記述できます。

<script>
  var myArray = ${yourTLD:toJSON( some.java.array _)};
</script>

「toJSON」関数は配列を取得し、その内容に応じて標準の JSON としてレンダリングします (もちろん、使用される JSON コードによっては、多少制約を受けることになります)。結果としてブラウザーに配信される JavaScript は次のようになります。

<script>
  var myArray = [ "something", "something", "something" ];
</script>

ここでも、Java 配列の内容に完全に依存します。Java にはさまざまな JSON エンコーディング ライブラリがあり、それらを記述するのはそれほど難しくありません (実際、特殊なケースでは、オープン ソース ライブラリを採用するよりも簡単な場合があります)。関数を JSTL EL 関数として提供するには、public static 関数をどこかに作成し、それを .tld ファイルで宣言するだけです。

于 2012-05-23T14:44:58.597 に答える