我想将Struts2动作类的json数组传递给jsp页面。我正在尝试将数据集作为字符串发送。我想知道的是,如何读取javascript中的数据。
这是我在动作课中的方法
private InputStream inputStream; /* getter and setter*/ public String getClientMilestone() throws DAOTransientException, DBConfigException{ PaymentScheduleDao paymentScheduleDao = new PaymentScheduleDao(); List <PaymentMilestone> paymentScheduleInfo = paymentScheduleDao.getClientMilestoneInfo(projectId); String result = "["; for(int i=0; i<paymentScheduleInfo.size(); i++){ result += "{"+"'"+"item"+i+"' : {"+ "'"+"milestoneName"+ "'"+":"+"'"+paymentScheduleInfo.get(i).getMilestone_name()+"'"+"}"+"},"; } result += "]"; System.out.println("result is "+result); inputStream = new StringBufferInputStream(result); return "success"; }
打印如下
result is [{'item0' : {'milestoneName':'milestone 1'}},{'item1' : {'milestoneName':'milestone 2'}}]
struts.xml
<package name="ClientMilestone" namespace="/" extends="struts-default"> <action name="getClientMilestone" class="packageName.PaymentScheduleAction" method="getClientMilestone"> <result name="success" type="stream"> <param name="contentType">text/html</param> <param name="inputName">inputStream</param> </result> <result name="failure">./LandingPage.jsp</result> <result name="error">./Error.jsp</result> </action> </package>
jsp中的javascript函数
function createOrViewPs() { var projectId = document.getElementById("projectId").value; $.ajax({ method: "GET", url: "getClientMilestone", data: {"projectId" : projectId}, traditional: true, success: function(result){ var jsonArr = result; for (var i=0; i<jsonArr.length; i++) for (var name in jsonArr[i]) { alert("Item name: "+name); alert("Source: "+jsonArr[i][name].milestoneName); } }, error: function(){ alert("fail"); } }); }
因为您从服务器返回了带有stream结果类型的JSON字符串化版本(请注意,该流结果类型可能不合适,请参见下文),所以您需要使用JSON.parse()将其解析为JSON,如果您使用的是jQuery最好使用$ .each
stream
var jsonArr = JSON.parse(result); $.each (jsonArr, function(index, value){ $.each (value, function(key, value){ console.log("Item name: "+key); console.log("Source: "+value.milestoneName); }); });
您做错的是手动构建json。您应该使用将Java对象序列化为JSON的工具。Struts2 在软件包中具有json-lib可用的jar,可用于序列化为json,或者,如果您正在使用,struts2-json- plugin则它具有内置的序列化器。如果您正在使用,struts2-rest- plugin则可以使用其他串行器,例如Jackson。您选择用于序列化数据的库的方式超出了此答案的范围。您可以在SO和Struts网站上找到许多示例。它们中的大多数使用JSON插件返回浏览器支持的JSON对象,即不需要解析,但是对JSON进行解析对于避免错误和数据丢失很有用。
struts2-json- plugin
struts2-rest- plugin