dojox.grid.DataGrid poblado de Servlet
-
04-10-2019 - |
Pregunta
Me gustaría hava un Dojo dojox.grid.DataGrid con sus datos de un servlet.
Problema:. Los datos devueltos por el servlet no va a ser visualizado, sólo el mensaje "Lo sentimos, ha ocurrido un error"
Si tan sólo colocar la cadena JSON en el HTML, funciona. ARRRRGGH.
Puede alguien por favor me ayude!
Gracias Jeff Porter
código de servlet ...
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
res.setContentType("json");
PrintWriter pw = new PrintWriter(res.getOutputStream());
if (response != null) pw.println("[{'batchId':'2001','batchRef':'146'}]");
pw.close();
}
HTML código ...
<div id="gridDD" dojoType="dojox.grid.DataGrid"
jsId="gridDD" style="height: 600x; width: 100%;"
store="ddInfo" structure="layoutHtmlTableDDDeltaSets">
</div>
var rawdataDDInfo = ""; // empty at start
ddInfo = new dojo.data.ItemFileWriteStore({
data: {
identifier: 'batchId',
label: 'batchId',
items: rawdataDDInfo
}
});
<script>
function doSelectBatchsAfterDate() {
var xhrArgs = {
url: "../secure/jsonServlet",
handleAs: "json",
preventCache: true,
load: function(data) {
var xx =dojo.toJson(data);
var ddInfoX = new dojo.data.ItemFileWriteStore({data: xx});
dijit.byId('gridDD').setStore(ddInfoX);
},
error: function(error) {
alert("error:" + error);
}
}
//Call the asynchronous xhrGet
var deferred = dojo.xhrGet(xhrArgs);
}
</script>
<img src="go.gif" onclick="doSelectBatchsAfterDate();"/>
Solución
Cuando se crea el dojo.data.ItemFileWriteStore
utilizando los datos JSON devueltos desde el servidor. Usted acaba de proporcionar los elementos, que todavía tiene que especificar los metadatos. El código correcto debe ser lo más abajo.
var ddInfoX = new dojo.data.ItemFileWriteStore({
data: {
identifier: 'batchId',
label: 'batchId',
items: xx
}
});
Y no se necesita la función dojo.toJson
que convierte el objeto JSON para una cadena JSON. El dojo.data.ItemFileWriteStore
requiere un objeto JSON como parámetro, no una cadena JSON.