0

I am trying to show some date in my Kendo UI grid. Data cames from a java servlet. I set status code to 500 when error occuured. I can see the error on console but cannot handle in js. I want to show some message to user like 'Update fail because of xxx' or something else. Here is my read code:(Always returns status 500 for testing.)

private void read(HttpServletRequest request, HttpServletResponse response) {
    try {
        DBOperations db = new DBOperations();
        Gson _gson = new Gson();
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
        System.out.println("Read called @" + sdf.format(cal.getTime())
                + " | p_callback: " + request.getParameter("callback"));
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.setStatus(500);// For testing. Always return error!!!
        response.getWriter().println(
                (request.getParameter("callback") == null ? "callback"
                        : request.getParameter("callback"))
                        + "("
                        + _gson.toJson(db.getTrucksInPort()) + ")");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

And here is my js. part in html:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Kendo UI - Grid Example</title>
        <link href="styles/examples-offline.css" rel="stylesheet">
        <link href="styles/kendo.common.min.css" rel="stylesheet">
        <link href="styles/kendo.rtl.min.css" rel="stylesheet">
        <link href="styles/kendo.default.min.css" rel="stylesheet">
        <link href="styles/kendo.dataviz.min.css" rel="stylesheet">
        <link href="styles/kendo.dataviz.default.min.css" rel="stylesheet">
        <script src="js/jquery.min.js"></script>
        <script src="js/kendo.all.min.js"></script>
        <script src="js/console.js"></script>
    </head>
    <body>
        <div id="example">
            <div id="grid"></div>

            <script>

                                $(document).ready(function () {
                                    var crudServiceBaseUrl = "http://localhost:8080/ws/api",
                                        dataSource = new kendo.data.DataSource({
                                            transport: {
                                                read:  {
                                                    url: crudServiceBaseUrl + "/ask",
                                                    dataType: "jsonp"
                                                },
                                                update: {
                                                    url: crudServiceBaseUrl + "/ask/Update",
                                                    dataType: "jsonp"
                                                },
                                                destroy: {
                                                    url: crudServiceBaseUrl + "/ask/Destroy",
                                                    dataType: "jsonp"
                                                },
                                                create: {
                                                    url: crudServiceBaseUrl + "/ask/Create",
                                                    dataType: "jsonp"
                                                },
                                                parameterMap: function(options, operation) {
                                                    if (operation !== "read" && options.models) {
                                                        return {models: kendo.stringify(options.models)};
                                                    }
                                                }
                                            },
                                            batch: true,
                                            pageSize: 20,
                                            schema: {
                                                model: {
                                                    id: "rowid",
                                                    fields: {
                                                        hn: { editable: true, nullable: false },
                                                        tn: { validation: { required: true } },
                                                        gid: { type: "date", validation: { required: true, min: 1} },
                                                        gign: { type: "number" },
                                                        sgid: { type: "date" },
                                                        dgii: { type: "number"}
                                                    }
                                                }
                                                ,errors:"Errors"
                                                
                                            },
                                            error:function(e){
                                                alert("Failed!.");
                                                this.cancelChanges();
                                                }
                                            
                                        });
                
                                    $("#grid").kendoGrid({
                                        dataSource: dataSource,
                                        pageable: true,
                                        height: 550,
                                        toolbar: ["create"],
                                         sortable: {
                                            mode: "single",
                                            allowUnsort: false
                                        },
                                        columns: [                           
                                            { field:"hn", title: "Haulier No" },          
                                            { field: "tn", title:"Trailer No", format: "{0:c}" },
                                            { field: "gid", title:"Gate In Date",format:"{0:MM-dd-yyyy HH:mm:ss}",editor: dateTimeEditor },
                                            { field: "gign", title:"Gate In Gate No" },
                                            { field: "sgid", title:"Second Gate In Date" ,format:"{0:MM-dd-yyyy HH:mm:ss}"},
                                            { field: "dgii", title:"Dummy Gate In" },
                                            { command: ["edit", "destroy"], title: "&nbsp;" }],
                                        editable: "popup"
                                    });
                                });
                                function dateTimeEditor(container, options) {
                    $('<input data-text-field="' + options.field + '" data-value-field="' + options.field + '" data-bind="value:' + options.field + '" data-format="' + options.format + '"/>')
                            .appendTo(container)
                            .kendoDateTimePicker({});
                
                }
            </script>
        </div>
    </body>
</html>

In this code block i try to write some message to screen but nothing occurs.

,errors:"Errors"

                                        },
                                        error:function(e){
                                            alert("Failed!.");
                                            this.cancelChanges();
                                            }

Where am i wrong? Thank you.

4

1 回答 1

0

I found where I am wrong.

Kendo UI catches errors from response JSON (Not from status). So I return this Json String

{ "Errors": "This error message" }

Errors tag must be the same with yor js code errors:"Errors"

And with this code I can show the server message on the screen

error:function(e){
alert("This is error message.\n"+e.errors);
}
于 2015-08-10T13:59:16.563 回答