2

我有一个带有一些数据的 jqgrid。When two of the rows are selected, I'd like to add a record in the database (in a different table than the one of the jqgrid). 我所做的是使用以下代码在导航栏中创建一个新按钮:

    jQuery("#tabla").navButtonAdd('#navegacion',
        {
            caption: "Crear tramo", buttonicon: "ui-icon-extlink", cursor:"pointer", title: "Crear tramo",
            onClickButton: $(function() {   
                 var selectedrows = $("#tabla").jqGrid('getGridParam','selarrrow');
                 var er1=$("#tabla").jqGrid('getRowData',selectedrows[0]);
                 var er2=$("#tabla").jqGrid('getRowData',selectedrows[1]);

                $.ajax({
                    dataType: 'json',
                    mtype: 'POST',                                  
                    url: 'json/operaciones.jsp',                                                                    
                    postData: { oper:'add', id1:er1, id2:er2},
                    success: function(data) {
                        alert(data);
                    }
                })                                
            })
    });

我在文件 opaciones.jsp 中的内容是:

    <%

            String salida="";

            DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());

            Connection con = DriverManager.getConnection("my", "Connection", "Parameters");

            try {

                    System.out.println("Parámetros enviados:");
                    Enumeration e=request.getParameterNames();
                    while (e.hasMoreElements()){
                            String par=(String)e.nextElement();
                            System.out.println(par+":"+request.getParameter(par));
                    }



            String operacion=request.getParameter("oper");
            String id1=request.getParameter("id2");
            String id2=request.getParameter("id2");
            String comentarios="prueba";


            if (operacion.equals("add")) {

                    PreparedStatement stmt=con.prepareStatement(
                            "INSERT INTO TRAMOS "+
                            "(COMENTARIOS,ELEMENTOS_REGISTROCODIGO,ELEMENTOS_REGISTROCODIGO2, ENTIDADESCIF) "+
                            "VALUES (?,?,?,?,?)");
                    stmt.setString(1,comentarios);
                    stmt.setString(2,id1);
                    stmt.setString(3,id2);
                    stmt.setString(4,"Q1818002F");

                    stmt.executeUpdate();
                    stmt.close();
                    salida="{\"correcto\":true,\"clave\":\""+id1+"|"+id2+"\",\"mensaje\":\"OK\"}";
            }
            }
            catch (Exception e) {
                    String cadenaError=e.toString().substring(e.toString().indexOf(":")+2);
                    cadenaError=cadenaError.replace('\n',' ');
                    cadenaError=cadenaError.replace("\"","\\\"");
                    salida="{\"correcto\":false,\"clave\":\"\",\"mensaje\":\""+e.toString()+"\"}";
            }
            finally {
                    con.close();
            }
        System.out.println("salida:"+salida);

        response.setContentType("application/json");
    %>     
    <%=salida%>

但它不起作用,我得到的是“java.lang.NullPointerException”。错误在哪里?如何将数据发送到文件 opaciones.jsp?非常感谢,娜塔莉亚

4

2 回答 2

1

您使用的代码中的一个明显错误是使用了postData代替datamtype代替type作为jQuery.ajax的参数。

我建议您另外编写更安全的代码。例如,您在验证 that is not和 that之前使用selectedrows[0]andselectedrows[1]内部。例如,如果用户在选择至少两行之前单击按钮,则在 JavaScript 代码中会出现异常。onClickButtonselectedrowsnullselectedrows.length > 1

于 2013-01-29T09:10:09.360 回答
0

这是一个愚蠢的错误......终于奏效了:

       jQuery("#tabla").navButtonAdd('#navegacion',
                {
                    caption: "Crear tramo", buttonicon: "ui-icon-extlink", cursor:"pointer", title: "Crear tramo",
                    onClickButton: function() {                       
                        selectedrows = $("#tabla").jqGrid('getGridParam','selarrrow');
                    if(selectedrows.length==2){
                        er1=$("#tabla").jqGrid('getRowData',selectedrows[0]);
                        er2=$("#tabla").jqGrid('getRowData',selectedrows[1]);                       
                        $.ajax({
                            datatype:'json',
                            type:'GET',
                            url:'json/operacionesTramos.jsp',
                            data:{oper:'add',id1:er1.codigo,id2:er2.codigo},
                            success: function(data) {
                                alert("Tramo creado");
                            }
                        })  
                        }
                        else{
                        alert("Seleccione dos arquetas, por favor");                     
                        }                   


                    }
            });

谢谢奥列格!

于 2013-02-07T08:24:03.717 回答