我有一个Liferay portlet,我将一个String数组从动作阶段传递到我的.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>
答案 0 :(得分: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>