You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JSTL将多个动态生成文本框的数据保存到数组?

正确实现动态文本框数据的JSTL数组存储与遍历

原代码问题分析

你的代码存在两个核心错误:

  1. 错误调用Java API:JSTL的EL表达式无需直接使用request.getParameterValues(),且参数名未加引号,正确参数名应为"textbox"(表单中name="textbox[]"提交后,后台识别的参数名实际是textbox)。
  2. 遍历目标错误:你将数据存入data变量后,却尝试遍历param.data,但data是存储在页面域的变量,不属于param请求参数集合。

正确实现代码

<c:if test="${param.buttonSave != null}">
    <!-- 通过paramValues直接获取多值参数,返回字符串数组 -->
    <c:set var="data" value="${paramValues.textbox}" />
    
    <!-- 遍历存储在data变量中的数组 -->
    <c:forEach var="item" items="${data}">
        <c:out value="${item}" />
        <br/> <!-- 可选:换行分隔每个输入值 -->
    </c:forEach>
</c:if>

关键说明

  • paramValues内置对象:JSTL专门用于处理多值请求参数的EL对象,直接返回字符串数组,无需手动调用Java方法。
  • 表单命名规则:前端用name="textbox[]"是多值控件的常用标识,后台通过paramValues.textbox即可获取所有输入值,无需带[]后缀。
  • 变量作用域:<c:set>默认将data存在页面域,若需跨页面使用,可添加scope="request"或scope="session"参数指定作用域。

补充:动态生成文本框的参考代码

确保前端表单控件生成正确,示例如下:

<form method="post">
    <c:forEach begin="1" end="${numberAsked}" varStatus="status">
        <input type="text" name="textbox[]" placeholder="输入第${status.count}个内容" />
        <br/>
    </c:forEach>
    <button type="submit" name="buttonSave">保存</button>
</form>

内容的提问来源于stack exchange,提问作者Raúl Peñate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:54:42