使用javascript更改struts2迭代器内的输入值

时间:2017-03-18 13:45:58

标签: javascript java json jsp struts2

我需要更改struts2迭代器内部的输入类型文本的值。我不想刷新所有页面,我只想刷新输入的值,我认为使用JSON可能是一个解决方案(我不确定这是否是最佳方式,我&# 39; m初级程序员...)

这是我的jsp

<input type="text" name="cantidad" id="cantidadIndividual" readonly="readonly" value="<s:property value="#a.cestaUnidades"/>">
    <img src="../Imagenes/Administracion/Signo_Mas.png" id="mas" onclick="MasMenosCantidad('+',<s:property value="#a.cestaUnidades"/>,<s:property value="#a.cestaId"/>,<s:property value="#a.ropaStock.rostockUnidades"/>);"/>

    <script>
            function MasMenosCantidad(valor,cantidad,id,stock){
                document.getElementById("clave").value = id;
                if(valor == '+'){
                    cantidad++;
                }
                if(valor == '-'){
                    cantidad--;
                }
                if(cantidad <= stock){
                    document.getElementById("cantidadIndividual").value = cantidad;
                    usarAJAXCantidad(id,cantidad);
                    //document.getElementById("formCantidad").submit();
                } else {                    
                    if(valor == '-'){
                        document.getElementById("cantidadIndividual").value = stock;
                        usarAJAXCantidad(id,cantidad);
//                        document.getElementById("formCantidad").submit();
                    } else {
                        alert("Stock excedido");
                        }
                    }
                }
            }
            function usarAJAXCantidad(clave,cant){
                $.getJSON('ajaxCantidad', {
                    clave : clave,
                    cantidad : cant
                }, function(jsonResponse3) { 
                    var nuevaCantidad = $('#cantidadIndividual');
                    $.each(jsonResponse3.stateMap3, function(key, value) {
                        nuevaCantidad.value = value;
                    });
                });
            }            
        </script>

strutx.xml

<action name="ajaxCantidad" class="Acciones.HomeCesta" method="ajaxCantidad">
            <result type="json">
                <param name="excludeNullProperties">true</param>
                <param name="noCache">true</param>
            </result>
        </action>

HomeCesta.java

public String ajaxCantidad() throws Exception {

        c = ControladoresDAO.cCesta.RecuperaPorId(clave);
        c.setCestaUnidades(cantidad);
        ControladoresDAO.cCesta.Modifica(c);
        stateMap3.clear();
        stateMap3.put("", ""+cantidad);
        return SUCCESS;

    }

我的问题是在迭代器中,只刷新了id为cantidadIndividual的第一个输入,但是如果我在第二个,第三个...按钮中点击图像Signo_Mas.png,则该值显示在第一个输入中id cantidadIndividual。

1 个答案:

答案 0 :(得分:0)

当您使用document.getElementById("cantidadIndividual")时,仅返回具有相同ID的第一个元素。您应该将id更改为每次迭代都是唯一的。

您可以在JSP中使用变量

document.getElementById("cantidadIndividual${uniqueIdentifier}")

或者如果您使用的是Struts2

document.getElementById("cantidadIndividual<s:property value='%{uniqueIdentifier}'/>")