我有一个Liferay portlet,我将一个String数组从动作阶段传递到我的.jsp文件中的渲染阶段.我能够访问数组并像这样迭代它: c:forEach var="item" items="${arrayItems}" p${item}/p/c:forEach 这只是为了检查
<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>您需要一个以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>