从.jsp文件传递数组到JavaScript函数

3

我有一个Liferay门户,在我的.jsp文件中从动作阶段传递一个字符串数组到渲染阶段。我能够访问该数组并像这样迭代它:

<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上传递portlet数据的教程并不多(当我找到任何教程时,该方法仅适用于单个字符串而不是数组)。谢谢任何提示!

PS:我已检查我的JavaScript函数是否正常工作:

<script>
    displayMessages(["One", "Two", "Three"]);
</script>
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>

2
我已经使用了上述方法,但将Writer对象作为参数传递。另一种方法是使用JSON,但这需要更多的工作,尽管从长远来看更好。 - tgkprog
在jsp页面中声明函数时,需要使用<%!%>。我已经更新了答案并进行了更改。但是,如果您要在不同的页面中创建javascript数组,则可能需要创建一个常规的.java文件,然后像这样包含它:<%@ page import="com.mycompany.MyUtilClass" %> - Simon
当我调用 displayItems(<% getArrayString(messageContents); %>);,我得到以下错误:ERROR [MinifierUtil:108] 4: 20: XML 语法非法形式... - Smajl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接