如何将Java数组元素添加到JavaScript数组中?

3
我该如何将Java数组的内容添加到空的JavaScript数组中?我尝试了但是没有成功。
以下是我的file.jsp文件内的代码。
<%@page import="javax.portlet.PortletPreferences" %>

   PortletPreferences prefs = renderRequest.getPreferences(); // here i am reading values from preferences in Liferay and rendering values

 <select id="dropdown1" onchange="changeAction(this.value);">
                        <option value="" selected="selected" >Select</option>
                        <option value="">value1</option>
                        <option value="">value2</option>
  </select>

      <label>Device</label>
      <%

       String device1 = prefs.getValue("device1","");
       String[] array1 = device1.split("\n"); // String[] array=["books","pens","cars"];
     %>

      <select id="dropdown2">
                <option value="select" selected="selected">Select</option>
      </select>

以下是我的JavaScript代码,JSP代码和JavaScript都在同一个JSP文件中。
<script>
     function changeAction(optionVal){
     var tempArrayLabel = [];

     jQuery("#dropdown2").empty().append('<option value="-1" >Select</option>');

    if(optionVal == "selected val in first drop down") {

tempArrayLabel = "add values from array1 or device1"; // update the drop down list


}

for (var i=0;i<tempArrayLabel.length;i++){
    jQuery('<option/>').html(tempArrayLabel[i]).appendTo('#dropdown2');
}

}

 </script>

感谢任何建议。

String[] array=["books","pens","cars"]; 不是文档元素。文档元素是HTML标签,而不是Java代码。您可以编写一个包含逗号分隔值的div,并将其命名为arrayDiv,并从中获取值。 - sgpalit
@sgpalit.. 在我的情况下,我只需要更改JavaScript代码,但不能更改String[] array=["books","pens","cars"]; 因为这个数组是动态获取值的,但为了参考目的,我像这样提到了它。请建议我使用JavaScript,以便将值添加到“tempArrayValue”中。 - user3534759
好的,那么为什么需要通过JavaScript清除选择选项,然后再添加它们,因为选项保持不变?我的(当前的)答案将无法工作,因为代码在两个文件中而不是一个文件中。如果只需清除所选选项,则无需从选择框中删除选项并重新添加它们。 - Nikos M.
@Nikos M,JSP代码和JavaScript都在同一个JSP文件中。你的答案非常接近,但有些地方还需要完善。请单独更新你的Java 8答案。 - user3534759
@NikosM。你的代码很好!非常努力。谢谢。 - user3534759
1个回答

2

更新

请尝试以下方法(适用于Java 8,这里有更多Java数组连接的方法

<%  
  String[] array=["books","pens","cars"];
  String array_joined = '["' + String.join('","', array) + '"];';
%>

如果 String.join 方法不可用,可以使用以下方法将数组连接起来:

<%  
  String[] array=["books","pens","cars"];
  String array_joined = '"' + array[0] + '"';
  for (int i=1; i<array.length; i++) array_joined += ',' + '"' + array[i] + '"';
  array_joined = '[' + array_joined + '];';
%>

<script>
     var javaArray= <%= array_joined %> // renders ["books","pens","cars"];

     var tempArrayValue = [];

     function myFunction(){

     for(var i=0,j=0;i<javaArray.length;i++,j++){

     tempArrayValue[j]=javaArray[i]; //trying to store ["books","pens","cars"] values into "tempArrayValue"

     }

  }

</script>

注意 我不记得jsp标签了,所以我可能使用了不正确的标签来呈现上面的jsp表达式,根据需要使用。

发现 使用<%= %>表达式标签


var javaArray= ["<% String.join('", "', array); %>"]; 在这行代码中,我得到了一个“无效字符常量”的错误。 - user3534759
@user3534759,实际上这应该是一个JSP渲染表达式标签,所以我可能使用了不正确的标签<% %>,已经提到了这一点,我现在不记得标签语法,正在寻找它。 - Nikos M.
尼科斯,变量javaArray = ["<%=String.join('", "', array); %>"]; 仍然出现以下错误。在此行找到多个注释:
  • 类型不匹配:无法将String[]转换为任何内容
  • 无效的字符常数
- user3534759
@user3534759,代码是否与其余代码在同一页上(其中定义了数组["books","pens","cars"])?如果是,请问您使用的是Java 8还是其他版本?根据答案中的链接,String.join将与Java 8一起使用。提供替代方法,更新答案。 - Nikos M.
@user3534759,抱歉,删除";",在array_joined之后更新。 - Nikos M.
显示剩余7条评论

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