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.