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

JSP点击按钮操作ArrayList时如何将最新状态传递给Servlet处理

问题排查与修复方案

1. 表单提交无响应、收不到参数问题

你JSP里的表单method属性是post,但你的Servlet只实现了doGet方法,没有处理POST请求,默认的doPost会直接返回错误,所以点击按钮后没有进入你写的业务逻辑,自然打印不出参数。

  • 修复方式一:在Servlet里新增doPost方法,直接调用doGet即可:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
}
  • 修复方式二:把JSP表单的method="post"改成method="get"。

另外你表单里的button1类型是type="button",普通按钮默认不会触发表单提交,要改成type="submit":

<input type="submit" name="button1" value="Button 1" />

2. ArrayList操作后状态不保留问题

你现在每次请求Servlet都重新new三个ArrayList并填充初始值,就算你这次操作修改了List,下次请求又会被重置成初始状态,看不到操作效果。
要保留状态可以把三个ArrayList存在Session里,只有第一次访问的时候初始化:
修改Servlet里的List初始化逻辑:

// 先从session里取
HttpSession session = request.getSession();
ArrayList<ObjetosArreglo> personas = (ArrayList<ObjetosArreglo>) session.getAttribute("ArrayPer");
ArrayList<ObjetosArreglo> mascotas = (ArrayList<ObjetosArreglo>) session.getAttribute("ArrayMasc");
ArrayList<ObjetosArreglo> comidas = (ArrayList<ObjetosArreglo>) session.getAttribute("ArrayCom");

// 第一次访问不存在的话才初始化
if(personas == null) {
    personas = new ArrayList<ObjetosArreglo>();
    personas.add(new ObjetosArreglo("Cesar"));
    personas.add(new ObjetosArreglo("Miguel"));
    personas.add(new ObjetosArreglo("Chavez"));
    personas.add(new ObjetosArreglo("Linares"));
    personas.add(new ObjetosArreglo("TATAMASTER"));
}
if(mascotas == null) {
    mascotas = new ArrayList<ObjetosArreglo>();
    mascotas.add(new ObjetosArreglo("Clifford"));
    mascotas.add(new ObjetosArreglo("Chuzo"));
    mascotas.add(new ObjetosArreglo("Hoshi"));
    mascotas.add(new ObjetosArreglo("Persian"));
    mascotas.add(new ObjetosArreglo("Bebeto"));
}
if(comidas == null) {
    comidas = new ArrayList<ObjetosArreglo>();
    comidas.add(new ObjetosArreglo("Carne"));
    comidas.add(new ObjetosArreglo("Queso"));
    comidas.add(new ObjetosArreglo("Yogur"));
    comidas.add(new ObjetosArreglo("Pan dulce"));
    comidas.add(new ObjetosArreglo("Pasta"));
}

// 操作完之后把修改后的List存回session
session.setAttribute("ArrayPer", personas);
session.setAttribute("ArrayMasc", mascotas);
session.setAttribute("ArrayCom", comidas);

3. 工具方法逻辑错误修复

你当前的moverPriElemento方法逻辑和调用的预期不符,按你代码里的调用MetodosUtiles.moverPriElemento(comidas, mascotas),你是想把comidas的第一个元素移到mascotas对吧?现在的代码是把mascotas的第一个元素移到comidas,逻辑反了,修改成:

public static void moverPriElemento(ArrayList<ObjetosArreglo> oriList, ArrayList<ObjetosArreglo> targetList) {
    // 把oriList的第一个元素移到targetList
    if(oriList != null && oriList.size() > 0) {
        targetList.add(oriList.remove(0));
    }
}

同时建议给工具方法的ArrayList加上泛型,避免类型转换错误,另外所有操作List的地方都加非空和大小判断,避免空指针或下标越界。


4. 其他优化

你当前的borrarElemento方法是先get(index)再remove对象,直接调用remove(int index)效率更高,也不会因为重复元素删错:

public static void borrarElemento(ArrayList<ObjetosArreglo> elem1, int index) {
    if(elem1 != null && index >=0 && index < elem1.size()) {
        elem1.remove(index);
    }
}

内容的提问来源于stack exchange,提问作者Cesar Chavez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 16:54:07