3

.jsp ファイルでアクション フェーズからレンダリング フェーズに String 配列を渡す Liferay ポートレットがあります。配列にアクセスして、次のように反復処理できます。

<c:forEach var="item" items="${arrayItems}"> 
    <p>${item}</p>
</c:forEach> 

これは、データの受け渡しが正常に機能することを確認するためのものです...ただし、この配列全体を JavaScript 関数 (キャンバスへのデータのレンダリングを処理する関数) に渡したいと思います。これを行う方法はありますか?

これまでのところ、次のことを試しました。

<%

String[] items;
items = new String[((String[])request.getAttribute("arrayItems")).length];
items = ((String[])request.getAttribute("arrayItems"));

%>

<script>
    displayItems(<% arrayItems %>);
</script>

そしてまた

<script>
        displayItems(${arrayItems});
</script>

これはおそらく非常に基本的な質問であることは承知していますが、Web 上のポートレットでデータを渡す方法に関するチュートリアルはあまりありません (そして、私が見つけたとき、アプローチは配列ではなく単一の文字列に対してのみ機能しました)。ヒントをありがとう!

PS: JavaScript 関数が正しく動作することを確認しました:

<script>
    displayMessages(["One", "Two", "Three"]);
</script>
4

1 に答える 1

3

配列の文字列を JavaScript 配列形式で出力するメソッドが必要です。jsp コードはサーバー側で実行され、html および javascript コードをテキストで返します。次に、そのコードがクライアント側で実行されます。

<%!
public static String getArrayString(String[] items){
    String result = "[";
    for(int i = 0; i < items.length; i++) {
        result += "\"" + items[i] + "\"";
        if(i < items.length - 1) {
            result += ", ";
        }
    }
    result += "]";

    return result;
}
%>

もちろん、パフォーマンスを向上させるために StringBuffer を使用してこれを行うこともできますが、これはアイデアを示しています。

次に、このようなことをします

<script>
    displayItems(<% getArrayString(items) %>);
</script>
于 2013-05-24T09:03:00.257 に答える