Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组从.jsp传递到javascript函数_Javascript_Html_Jsp_Liferay_Portlet - Fatal编程技术网

将数组从.jsp传递到javascript函数

将数组从.jsp传递到javascript函数,javascript,html,jsp,liferay,portlet,Javascript,Html,Jsp,Liferay,Portlet,我有一个liferayportlet,在这里我在.jsp文件中从操作阶段传递字符串数组到呈现阶段。我可以访问数组并像这样迭代: <c:forEach var="item" items="${arrayItems}"> <p>${item}</p> </c:forEach> ${item} 这只是为了检查传递数据是否正常。。。但是,我希望将整个数组传递给我的javascript函数(该函数负责将数据呈现到画布)。你知道怎么做吗 到目

我有一个liferayportlet,在这里我在.jsp文件中从操作阶段传递字符串数组到呈现阶段。我可以访问数组并像这样迭代:

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

${item}

这只是为了检查传递数据是否正常。。。但是,我希望将整个数组传递给我的javascript函数(该函数负责将数据呈现到画布)。你知道怎么做吗

到目前为止,我已经尝试了以下方法:

<%

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

%>

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

displayItems();
而且

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

显示项(${arrayItems});
我知道这可能是一个非常基本的问题,但关于在web上的Portlet中传递数据的教程并不多(当我找到任何教程时,这种方法只适用于单个字符串,而不适用于数组)。谢谢你的提示

PS:我检查了javascript函数是否正常工作:

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

显示信息([“一”、“二”、“三”);

您需要有一个以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>

displayItems();

我使用了上面的方法,但将Writer对象作为参数。另一种方法是使用JSON,但是在jsp页面中声明函数时,需要使用
,这样做会重复工作更多,但从长远来看会更好。我用这个更改更新了答案。但是,如果要在不同的页面中创建javascript数组,则可能需要创建一个常规的.java文件,然后在调用displayiitems();,时像这样包含该文件;,我得到以下信息:ERROR[MinifierUtil:108]4:20:非法格式的XML语法。。。