我需要顯示一個網格,後端有Struts2。 我有一個類Tuple
表示數據,其中我創建了一個方法toJson()
即返回JsonObject
(使用谷歌GSON框架)jqGrid with Struts 2
在這一天結束時,我得到空網,看到的畫面。
下面是詳細信息:
public class Tuple implements Serializable{
//other methods here..
public JsonObject toJson() {
//create JSON referemce
jSonRef = new JsonObject();
jSonRef.add("ProposalId", new JsonPrimitive(m_lngProposalId));
jSonRef.add("ProposalLabel", new JsonPrimitive(m_strProposalLabel));
jSonRef.add("AnalysisStatus", new JsonPrimitive(m_strAnalysisStatus));
jSonRef.add("lockedBy", m_strLockedBy!=null? new
JsonPrimitive(m_strLockedBy): new JsonPrimitive(""));
return jSonRef ;
}
// other stuff here ...
}//end of the class
jSonRef
是類的一個成員變量。
struts.xml
是這樣的:
<action name="JsonGetter" class="com.bvn.ecost.framework.actions.JSonGetterAction">
<result name="success" type="json"/>
</action>
動作類:
package com.bvn.ecost.framework.actions;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import com.google.gson.JsonArray;
import com.opensymphony.xwork2.Action;
public class JSonGetterAction extends SuperAction{ //extends SuperAction
private static final Logger log = LogManager.getLogger(ReportDealAction.class);
private String results = null ;
public String execute() {
JsonArray propsArray = loadProposalsJson() //method from superclass, returning
//JsonArray
results = propsArray.toString() ;
return Action.SUCCESS ;
}
public String getResults() {
return results;
}
public void setResults(String results) {
this.results = results;
}
}
JSP頁面:
<code>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ page language="java" %>
<%@ page import="com.bvn.ecost.*" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.sql.Connection" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
try {
%>`
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml" >
<HEAD>
<link rel="stylesheet" type="text/css" href="css/mainStyles.css" />
<link type="text/css" href="css/redmond/jquery-ui-1.8.23.custom.css" media="screen"
rel="stylesheet" />
<link type="text/css" href="css/ui.jqgrid.css" media="screen" rel="stylesheet" />
<link type="text/css" href="css/jquery.loadmask.css" media="screen" rel="stylesheet" />
<link type="text/css" href="css/ui.app.css" media="screen" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.23.custom.min.js"></script>
<script type="text/javascript" src="js/grid.locale-en.js"></script>
<script type="text/javascript" src="js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="js/jquery.validate.js"></script>
<script type="text/javascript" src="js/jquery.loadmask.js"></script>
<script type="text/javascript" src="js/app-helper.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$.getJSON('JsonGetter.action', function(data) {
alert("Inside .getJson()") ;
console.log("data->results: "+data.results) ;
var this_grid;
this_grid = $this_app.define_grid("#grid-results", {
caption: 'Proposal Grid',
pager: '#pager-results',
data: $.extend(true, [], data.results),
datatype: "local",
colModel: [
{ name: 'ProposalId', index: 'ProposalId', width: 120, label: 'Proposal Id' },
{ name: 'ProposalLabel', index: 'ProposalLabel', width: 120, label: 'Label' },
{ name: 'AnalysisStatus', index: 'AnalysisStatus', width: 120, label: 'Status' },
{ name: 'lockedBy', index: 'lockedBy', width: 440, label: 'Locked by' }
],
inline_editing: false,
pager_options: {
del: false
});
}
) <!-- end of getJSon() -->
});
</script>
</HEAD>
<BODY>
<table align="center" width="100%"> <!-- Wrapper table -->
<tr>
<td>
<table align="center" width="100%"> <!-- Header image table -->
<jsp:include page="commonHead.jsp" flush="true" />
<tr>
<td colspan="10" align="center" style="color:#00509e">
<b><s:property value="statusString"/></b>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table align="center" width="60%">
<tr align="center">
<TD align="left">
<div id="div-results">
<table id="grid-results">
</table>
<div id="pager-results">
<div/>
</div>
<span id="results-status-message"></span>
</TD>
</tr>
</table>
</td>
</tr>
</table>
</BODY>
</HTML>
<%
}
catch (Exception e) {
Helper.handleException(e, request, response, out);
}
%>
我得到完整的頁面,但空網格:
線 「的console.log(」 數據 - >結果: 「+ data.results);」 顯示在瀏覽器的JavaScript控制檯,像這樣JSON:
data->results: [{"ProposalId":35145,"ProposalLabel":"US Laminating Corp 1","AnalysisStatus":"WIP","lockedBy":"cost-analyzer-admin"}]
我明白,這可能是不正確莫名其妙,但不知道怎麼辦。 此外,我試圖有在動作作爲的JSONObject 一個結果變量(和改變它獲得的值,以這種的方式)
results.add("result", propsArray) ;
然後改變JSP符合指定數據:要像:
data: $.extend(true, [], data.results.result),
但我在瀏覽器中獲得某種UnsupportedOperationException
。
謝謝羅馬。到目前爲止,這是迄今爲止我發現的最佳答案或建議解決方案。我爲此選擇了Struts,因爲我已經在我的J2EE中暴露了它,但似乎很難找到可用的整合知識。你會建議一個很好的資源嗎?我選擇了「Struts2 in action」這本書,當需要快速解決少數問題時,這是完全正確的,但還是足夠的。 –
@DimaR。如果你能快速解決,那麼對你有好處,每一個解決方案都是因爲努力工作,任何資源都是有益的,這個網站是偉大的,書籍對學習有好處,互聯網是大的。所以,祝你好運,如果你喜歡這個答案,不要忘了標記這個答案爲可接受的。 –