从动作到具有多个 JSONArray 对象的 JSP 的 JsonArray 返回类型?

Posted

技术标签:

【中文标题】从动作到具有多个 JSONArray 对象的 JSP 的 JsonArray 返回类型?【英文标题】:Return Type for JsonArray from Action to JSP having multiple JSONArray Objects? 【发布时间】:2014-01-11 12:45:54 【问题描述】:

我有一个 JSONArray,它有 2 个 JSONArray 对象,我从 Action 返回到 JSP。但是在 JSP 中,它会在从 Action 接收到的响应中引发错误。但是,我无法跟踪问题。请您指导。

操作代码:

try
        
            Class<EmployeePojo> objClass= EmployeePojo.class;
            Field[] methods = objClass.getDeclaredFields();
            columnJsonArrayObject=FormatDatesAndMethods.methodsData(methods);                                                       
            masterDataJsonArrayObject=new JSONArray();
            String query="from EmployeePojo";
            employeeList= factoryImplObject.searchByQuery(query);   
            if(employeeList!=null)
            
                for(int j=0;j<methods.length;j++)
                
                    for(int i=0;i<employeeList.size();i++)
                    
                        masterDataColumnValuesJsonObject=new JSONObject();
                        if((employeeList.get(i)).getWorkshopId()!=null)
                        
                            masterDataColumnValuesJsonObject.put(""+methods[0].getName()+"", employeeList.get(i).getId());  
                        
                        else
                        
                            masterDataColumnValuesJsonObject.put(""+methods[0].getName()+"", "");   
                        
                        if((employeeList.get(i)).getWorkshopName()!=null)
                        
                            masterDataColumnValuesJsonObject.put(""+methods[1].getName()+"", employeeList.get(i).getName());    
                        
                        else
                        
                            masterDataColumnValuesJsonObject.put(""+methods[1].getName()+"", "");   
                        
                        if((employeeList.get(i)).getDivId()!=null)
                        
                            masterDataColumnValuesJsonObject.put(""+methods[2].getName()+"", employeeList.get(i).getJivId());   
                        
                        else
                        
                            masterDataColumnValuesJsonObject.put(""+methods[2].getName()+"", "");   
                        
                        if((employeeList.get(i)).getHqId()!=null)
                        
                            masterDataColumnValuesJsonObject.put(""+methods[3].getName()+"", employeeList.get(i).getPlace());   
                        
                        else
                        
                            masterDataColumnValuesJsonObject.put(""+methods[3].getName()+"", "");   
                           
                        masterDataColumnValuesJsonObject.put("Old", "old");
                        masterDataJsonArrayObject.put(masterDataColumnValuesJsonObject);
                    
                    break;
                
                masterObject.put(0,columnJsonArrayObject);
                masterObject.put(1, masterDataJsonArrayObject);             
                if(masterObject!=null)
                
                    out.write(masterObject.toString);   
                
            
        
        catch(Exception e)
        
        

JSP 代码

function values()

    var values=
    
        url:"metaData.do?actionMethod=loadMasterData",
        handleAs:'json',
        content:parameter,
        load: function(response)
        

        alert("working");

        ,
        error: function(data)
        
            alert("Error occured while fetching data");
        ,
        timeout: 3000,
        sync: true                              
    ;
    dojo.xhrPost(values);

问题是我没有从 Action 得到正确的响应,因此 jsp 中弹出错误警报 在获取数据时发生错误

【问题讨论】:

控制台是否提供有关错误的任何其他信息? (顺便说一句,为什么要使用纯 js 进行 ajax 操作?这真的很麻烦。) 我在动作类中没有发现错误。但是在 JSP 中它会提示一个对象错误。 哦,你正在使用道场。别介意旁注。所以这是服务器端的错误?尝试打印堆栈跟踪。 你能在你的 JSP 中用 System.out 或 log.debug() 语句打印出 masterObject.toString() 吗? 【参考方案1】:

我没有发现您从 Action To JSP 返回的 JSONArray 对象有任何问题。尝试通过

返回 JSONArrayObject
out.println(masterObject.toString);

如果还是不行 我觉得有一些垃圾数据从Action 转移到JSP。在您的操作方法中尝试debuggingPrinting System.out.println,这可能会让您知道JSONArrayObject 中的数据正在从Action 传输到JSP。 如果还有问题? .如果您正在使用诸如 Struts/Springs 之类的框架(您应该提到的),请检查控件是否正在传递给您的控制器类,如果控件没有被传递。您的 XML 文件应该存在一些问题,控件从其中传递(例如:Struts.xml,如果是 Struts 2)到 Action 类。

【讨论】:

你是天才。感谢您采取所有可能的步骤来跟踪问题。 Struts-Config.xml 中提到的 Action 类的路径存在问题。我纠正了它,现在我可以在我的 JSP 页面中打印 JSONArrayObjects 的对象了。

以上是关于从动作到具有多个 JSONArray 对象的 JSP 的 JsonArray 返回类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取jsonarray中 某个值

JSONArray jsonary = (JSONArray) JSONObject.parse(s); 是啥意思

JSONArray和JSONObject的简单使用

JSONObject和JSONArray的区别是啥

JS中 对象数组按某一属性去重 校验是否有重复数据

java foreach是不是能对jsonarray进行遍历