Hello list!
I was using a JSON DataSource while doing a prototype, it was:
I retrieved and formatted the fields "grupos/grupo", "grupos/largura" and "grupos/comprimento" with success, setting the datasource with the fields:
And formatting one ListGrid cell using the CellFormatter:
Ok, but now the real world. I need to do the same thing using a RestDataSource. My XML looks like:
And I set up the DataSource using XPATH, the same way:
Doing the relevant changes in the grid code:
But now I get only the first match. There is any relevant differences between the two types of datasource, and I don't know?
Any help will be very appreciated.
I was using a JSON DataSource while doing a prototype, it was:
Code:
[ { id: 1, papel:"Kraft", cortadeira: 1, duracao: 600, larguraBobina:1200, diametroBobina:1200, tubete:76, grupos: [{grupo:1,largura:600,comprimento:600},{grupo:2,largura:600,comprimento:1000}], camadas: 4, distribuicao: "52x4 + 3x3", pesoBruto: "2000 kg" }, ... }
Code:
DataSourceField grupos = new DataSourceIntegerField("grupos/grupo", "Grupos"); grupos.setValueXPath("grupos/grupo"); DataSourceField larguraItem = new DataSourceIntegerField("grupos/largura", "Largura Item"); larguraItem.setValueXPath("grupos/largura"); DataSourceField comprimentoItem = new DataSourceIntegerField("grupos/comprimento", "Comprimento Item"); comprimentoItem.setValueXPath("grupos/comprimento");
Code:
grupos.setCellFormatter(new CellFormatter() { public String format(Object value, ListGridRecord record, int rowNum, int colNum) { if (record.getAttributeAsStringArray("grupos/grupo").length == 0) { return ""; } if (record.getAttributeAsStringArray("grupos/grupo").length == 1) { return fmt(record.getAttribute("grupos/grupo"), record.getAttribute("grupos/largura"), record.getAttribute("grupos/comprimento")); } String response = formataCampoGrupo(record, 0); for (int i = 1; i < record.getAttributeAsStringArray("grupos/grupo").length; i++) { response += "<br />" + formataCampoGrupo(record, i); } return response; } });
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <response> <status>0</status> <errors/> <startRow>0</startRow> <endRow>30</endRow> <totalRows>45</totalRows> <data> <record> <id>16757</id> <grupos> <grupo> <id>1</id> <grupo>1</grupo> <item> <geometria> <comprimento>1200 mm</comprimento> <largura>700 mm</largura> <direcaoFibra>LIVRE</direcaoFibra> </geometria> <multiplicidade>2</multiplicidade> </item> </grupo> <grupo> <id>2</id> <grupo>2</grupo> <item> <geometria> <comprimento>1100 mm</comprimento> <largura>200 mm</largura> <direcaoFibra>LIVRE</direcaoFibra> </geometria> <multiplicidade>1</multiplicidade> </item> </grupo> </grupos> <camadas>1</camadas> <distribuicao>20x1</distribuicao> <duracao>00:00</duracao> <geometriaEntrada> <diametro>1000 mm</diametro> <largura>766 mm</largura> <diametroInterno>76 mm</diametroInterno> </geometriaEntrada> ...
Code:
DataSourceField numGrupo = new DataSourceIntegerField("numGrupo", constants.grupos()); numGrupo.setValueXPath("grupos/grupo/grupo"); DataSourceField comprimentoItem = new DataSourceTextField("comprimentoItem", constants.comprimentoItem()); comprimentoItem.setValueXPath("grupos/grupo/item/geometria/comprimento"); DataSourceField larguraItem = new DataSourceTextField("larguraItem", constants.larguraItem()); larguraItem.setValueXPath("grupos/grupo/item/geometria/largura");
Code:
grupos.setCellFormatter(new CellFormatter() { @Override public String format(Object value, ListGridRecord record, int rowNum, int colNum) { if (record.getAttributeAsStringArray("numGrupo") == null) { return ""; } if (record.getAttributeAsIntArray("numGrupo").length == 1) { return fmt(record.getAttribute("numGrupo"), record.getAttribute("larguraItem"), record.getAttribute("comprimentoItem")); } String response = formataCampoGrupo(record, 0); for (int i = 1; i < record.getAttributeAsStringArray("numGrupo").length; i++) { response += "<br />" + formataCampoGrupo(record, i); } return response; } });
Any help will be very appreciated.