Java数组,如何通过JSP表单将数组传递到后台?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数组,如何通过JSP表单将数组传递到后台?相关的知识,希望对你有一定的参考价值。

jsp
<input type='checkbox' name="username"/>
后台 servlet
HttpServletRequest request= ServletActionContext.getRequest();
String[] username=request.getParameter("username");
试试这个吧这个是你没有用框架的情况下
如果要是用的struts2这个
在类的属性中定义个和页面上一样的名字的属性然后给get和set方法就能拿到
如果用的是spring mvc 你就在哪个方法的参数中直接填上这个input的name属性的名字就行了
public String test(String [] username)
..............

以上的方法你试试吧我以前那数组都是到后台变成了字符串了 例如aa,bb,cc.split(",");处理的
参考技术A 用session传递整个数组就好了,session.setAttribut....后台是session.getAttribut 参考技术B 1。后台写好该数组的 getting和setting方法,用于接收jsp传过来的数组,
2。如果只是用表单传值的话,好像只有checked 是往后台传数组
参考技术C <form action="$pageContext.servletContext.contextPath/后台方法" method="post">
表单内容
</form>追问

那我要是想将表单内容传到另一个页面呢?

追答

A页面-> 后台(request.setParameter("变量");->B页面()望采纳

参考技术D json的格式来传递数据的方法

如何使用 jsp 将 java 数组传输到 javaScript 数组?

【中文标题】如何使用 jsp 将 java 数组传输到 javaScript 数组?【英文标题】:How to transfer java array to javaScript array using jsp? 【发布时间】:2010-10-05 17:14:49 【问题描述】:

我的服务器上有一个字符串列表,我试图以数组的形式访问客户端。我尝试使用的代码如下:

在 jsp 中我有一个 List&lt;String&gt;

我正在尝试以下代码:

<%int j = 0; %>
for(var i = 0; i < <%=columns.size()%>; i++)

  colArray[i] = "<%=columns.get(j++)%>";

此代码只是为 colArray 中的每个元素返回列列表中的第一个元素。

我也试过了:

colArray = <%=columns.toArray()%>;

这也不起作用。 我觉得我在某个地方犯了一个小错误,只是没有看到它。我正在尝试做的事情是否可能以我正在尝试的方式进行?

谢谢。

【问题讨论】:

【参考方案1】:

您将在服务器上执行的 JSP 代码与在客户端上执行的 JavaScript 代码混合在一起。 sn-p &lt;%=columns.get(j++)%&gt; 在服务器上执行一次,此时围绕它的 JavaScript 循环无关紧要。当它到达客户端时,循环的主体只是说colArray[i] = "first entry";,这当然会将相同的字符串放入数组的每个元素中。

您需要做的是在服务器上执行一个循环,如下所示:

<% for (int i=0; i<columns.size(); i++)  %>
colArray[<%= i %>] = "<%= columns.get(i) %>"; 
<%  %>

我的 JSP 技能生疏,语法可能有所不同,但我希望你能明白。

编辑: 正如 cmets 中所指出的,您需要非常小心地转义这些字符串中可能导致它们被解释为 JavaScript 代码(最显着的引号)的任何内容 - 特别是如果它们包含用户生成的内容。否则,您的应用就会受到Cross-site scripting 和Cross-site request forgery 的攻击。

【讨论】:

如果字符串包含双引号、反斜杠或换行符等字符,这将不起作用。这些字符需要转义。 我还要在第二行的末尾添加一个分号。【参考方案2】:

一旦 JavaScript 到达客户端,服务器代码就停止执行。服务器代码不会与客户端代码“并行”执行。

您必须在 Java 中构建整个 JavaScript 初始化并将其完整且可执行地发送到客户端:

<%
StringBuffer values = new StringBuffer();
for (int i = 0; i < columns.size(); ++i) 
    if (values.length() > 0) 
        values.append(',');
    
    values.append('"').append(columns.get(i)).append('"');

%>
<script type="text/javascript">
var colArray = [ <%= values.toString() %> ];
</script>

这只是一种方法,您还可以通过在[] 中嵌入服务器代码来“即时”构建输出。我使用此示例尝试演示构建包含客户端 JavaScript 的字符串与将其输出到浏览器之间的分离。

【讨论】:

【参考方案3】:

尝试使用 JSON(Javascript 对象表示法)对数组进行编码并在 javascript 上对其进行解码会非常简单

在这里查看

http://www.json.org/java/index.html

【讨论】:

这个链接现在好像不可用了。【参考方案4】:

扩展语言:

colArray = $columns

【讨论】:

对数字列表很有用,字符串不被""包围【参考方案5】:

上面发布的解决方案在我的情况下不起作用,我需要一个额外的 Javascript 变量来进行转移:

var codesJS=new Array();
<% String[] codes=(String[])request.getAttribute("codes");
if(codes!=null)
    for(int i=0; i<codes.length; i++) %>
        var code='<%= codes[i] %>';           //--> without this doesnt work
        codesJS[<%= i %>]=code; 
    <%
%>

【讨论】:

“i”变量如何从js传递到java?【参考方案6】:

对我来说,这个解决方案很有效。首先,您应该制作一个 JSONArray 并使用它的 toJSONString() 方法。此方法将列表转换为 JSON 文本。它的结果是一个 JSON 数组。

<% 
List<String> exampleList = new ArrayList<>();
exampleList.add("Apple");
exampleList.add("Orange");
exampleList.add("Lemon");

JSONArray fruitList = new JSONArray();
fruitList.addAll(exampleList);
%>

在您的 JSP 页面中,您应该调用列表的 toJSONString() 方法,并将 JSON 文本传递给 JavaScript 数组。

<script type="text/javascript"> var fruitArray = <%= fruitList.toJSONString() %>;</script>

(可选地,您可以为列表创建一个简单的 getter 方法。如果您只在 JSP 页面中实例化具有列表字段的 JAVA 类。)

【讨论】:

以上是关于Java数组,如何通过JSP表单将数组传递到后台?的主要内容,如果未能解决你的问题,请参考以下文章

java 我通过后台传递一个json数组到前台,如何从javascript中 获取到

Html中 from表单提交如何提交数组到java后台?

Form表单如何传递List数组对象到后台的解决办法(转)

form表单传递数组到后台之后,后台怎么提取这个数组里面的值进行判断?

(转)JSP向后台传递参数的四种方式

ajax传递数组form表单提交对象数组