Spring DWR engine.js 失败未知错误

问题描述

我们有一个使用 Spring 框架 5.1.7.RELEASEJDK 1.8DWR 3.0.2 部署在 强>是 8.5。我们有一个 JSP 网页;向用户显示一些统计信息;网页像几年一样工作正常,突然间它开始无法加载。当我们调试问题时;我们将其缩小到 dwr 的 ajax 请求;它在 engine.js 中失败,出现未知错误。我们想到的;我们将提供信息来回答这个问题。代码片段在下面,它继续在下面的第 3 行失败,即 controllerClass.someMethod 调用selectObj1selectObj2 是数组类型的对象。

if (document.getElementById("someCheckBox").checked) {
    //Below controllerClass is the name of JS class produced by DWR but actually it's a Java class (i.e. object used below)
    controllerClass.someMethod("Value1",selectObj1,selectObj2,'Value2','Value1',function(data) {
    if (data != null) {
         hideView("viewOne",false);     //user defined function call
         fillData("viewName",data[0]);  //user defined function to fill the returned data
         valueRet1 = data[1]; 
         someConst = "X";
         displayNavCon(pageNumber);  //user defined function to control the navigation on web page
      }  else {
        alert("No Data Found!!!");  
        recordCount=0;
    }
});

解决方法

当涉及到 DWR 并且它开始失败时,engine.js 中出现错误;我认为 DWR 需要在那里进行一些改进。因为大部分时间错误是/是未知的。因此,在上述情况下 - 我们使用 selectObj1 像数组和 selectObj2 像在 DWR 的 ajax 调用中传递一些数据一个数组,构建的数据多年来没有变化;然后我们注意到在 selectObj1 中传递了一个十进制值,其中包含逗号,我们在将数据提供给 DWR 的 ajax 调用和 Bingo 之前删除了逗号!有效。代码修复如下;

//we are omitting the construction of other object being passed in i.e. selectObj2
var indexBrkLp = 0;
if (priceVal != null){
    while (priceVal.includes(",")){
        indexBrkLp++;
        priceVal = priceVal.replace(",","")
        if (indexBrkLp > 5){
            break;
        }
    }
}

var selectObj1={
    val2:(val2 == null? "": val2),priceVal :(priceVal == null? "": priceVal)
};

if (document.getElementById("someCheckBox").checked) {
    //Below controllerClass is the name of JS class produced by DWR but actually it's a Java class (i.e. object used below)
    controllerClass.someMethod("Value1",selectObj1,selectObj2,'Value2','Value1',function(data) {
    if (data != null) {
         hideView("viewOne",false);     //user defined function call
         fillData("viewName",data[0]);  //user defined function to fill the returned data
         valueRet1 = data[1]; 
         someConst = "X";
         displayNavCon(pageNumber); //user defined function to control the navigation on web page
      }  else {
        alert("No Data Found!!!");  
        recordCount=0;
    }
});

结论 - 如果您看到 engine.js 失败,那么它可能不仅仅是您的代码出了问题;它可能是它不喜欢的数据,也可能是与 DWR 相关的其他一些配置。