Saudações queridos amigos da terra média… digo, do planeta terra :). Atendo a pedidos, farei um passo a passo de como utilizar a opção Grid Java no WI. A Grid java é muito útil quando queremos realizar alguma lógica que não é possível resolver com SQL, ou montar registros que venham de algum arquivo ou WebService.
O exemplo que mostrarei abaixo é com uma grid sendo montada com registros fixos, que a partir dele pode ser substituido por registros vindo do banco, arquivos ou webservices.
Para construir este exemplo vou utilizar o último projeto que criamos, chamado projeto_objeto e o projeto de classes chamado ProjetoConector.
Primeiro passo, vamos separar nossa classe que será uma grid das outras classes que já existem. Crie o pacote br.com.projetoteste.grids e dentro do pacote crie a classe ExemploGridJava(Ta vendo Rodrigo, seguindo o CodeConvetions do Java ;p ). Seu projeto deverá ficar da seguinte maneira:

Para que o WI reconheça que esta classe será uma grid é necessário estender as seguintes interfaces na classe: InterfaceGrid, InterfaceParameters. Mais uma vez a interface InterfaceParameters é implementada, como vimos no post anterior ela serve para ler e exporta variáveis da página.
Após estender estas interfaces será necessário implementar os métodos abstratos dela, basta clicar no ícone de sugestão e importar os métodos, os métodos importados são:
execute – Espera um MAP[] que serão os registros que a grid espera.
getOutputParameters – Campo(s) de saída, que pode ser utilizado para jogar alguma variável de resposta da classe na página. Em caso de erro por exemplo é possível setar o erro nessa variável.
GetInputParameters – Campo(s) de entrada, serve de filtro para a consulta que montará a grid.
Seu código deve ficar da seguinte maneira:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.projetoteste.grids;
import br.com.itx.exception.UserException;
import br.com.itx.integration.DatabaseAliases;
import br.com.itx.integration.InterfaceGrid;
import br.com.itx.integration.InterfaceParameters;
import br.com.itx.integration.JavaParameter;
import br.com.itx.util.WIMap;
import java.util.Map;
/**
*
* @author Santana
*/
public class ExemploGridJava implements InterfaceGrid, InterfaceParameters{
@Override
public Map[] execute(WIMap wimap, DatabaseAliases da) throws UserException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public int returnType() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public JavaParameter[] getInputParameters() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public JavaParameter[] getOutputParameters() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
Agora vamos colocar a mão na massa. Para este exemplo vamos utilizar nosso bean frutas populando com alguns registros para fazer a montagem da grid, ficando como o código abaixo:
@Override
public Map[] execute(WIMap wimap, DatabaseAliases da) throws UserException {
fruta f1 = new fruta();
f1.setDs_nome("MANGA");
f1.setNr_peso(13.0);
f1.setNr_preco(5.55);
fruta f2 = new fruta();
f2.setDs_nome("CAJU");
f2.setNr_peso(12.0);
f2.setNr_preco(3.55);
fruta f3 = new fruta();
f3.setDs_nome("LARANJA");
f3.setNr_peso(5.0);
f3.setNr_preco(3.40);
List<fruta> lf = new ArrayList<fruta>();
lf.add(f1);
lf.add(f2);
lf.add(f3);
return null;
}
Agora vamos criar um método chamado getMapFruta que espera um objeto fruta e retorna um map, popula nossas variáveis da grid, como no exemplo abaixo:
public Map getMapGta(fruta d) {
Map map = new HashMap();
map.put("tmp.ds_nome", d.getDs_nome());
map.put("tmp.nr_peso", String.valueOf(d.getNr_peso()));
map.put("tmp.nr_preco", String.valueOf(d.getNr_preco()));
return map;
}
Um detalhe neste código é que todas as variáveis devem ser String, por algum motivo que não sei explicar, é que se for exportado uma variável que não seja String é mostrado o nome Object na página. Neste caso devemos da um parse em todas as variáveis que não sejam do tipo String.
Feito isto basta apenas criar uma variável do tipo Map[] do tamanho do nosso list no método execute da nossa classe e incluir nosso método getMapFruta que trata os campos do objeto fruta. Código abaixo:
Map[] map = new Map[lf.size()];
for (int i = 0; i < lf.size(); i++) {
map[i] = getMapFruta(lf.get(i));
}
return map;
Código completo da classe:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.projetoteste.grids;
import br.com.itx.exception.UserException;
import br.com.itx.integration.DatabaseAliases;
import br.com.itx.integration.InterfaceGrid;
import br.com.itx.integration.InterfaceParameters;
import br.com.itx.integration.JavaParameter;
import br.com.itx.util.WIMap;
import br.com.projetoteste.fruta;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
*
* @author Santana
*/
public class ExemploGridJava implements InterfaceGrid, InterfaceParameters {
@Override
public Map[] execute(WIMap wimap, DatabaseAliases da) throws UserException {
fruta f1 = new fruta();
f1.setDs_nome("MANGA");
f1.setNr_peso(13.0);
f1.setNr_preco(5.55);
fruta f2 = new fruta();
f2.setDs_nome("CAJU");
f2.setNr_peso(12.0);
f2.setNr_preco(3.55);
fruta f3 = new fruta();
f3.setDs_nome("LARANJA");
f3.setNr_peso(5.0);
f3.setNr_preco(3.40);
List<fruta> lf = new ArrayList<fruta>();
lf.add(f1);
lf.add(f2);
lf.add(f3);
Map[] map = new Map[lf.size()];
for (int i = 0; i < lf.size(); i++) {
map[i] = getMapFruta(lf.get(i));
}
return map;
}
public Map getMapFruta(fruta d) {
Map map = new HashMap();
map.put("tmp.ds_nome", d.getDs_nome());
map.put("tmp.nr_peso", String.valueOf(d.getNr_peso()));
map.put("tmp.nr_preco", String.valueOf(d.getNr_preco()));
return map;
}
@Override
public int returnType() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public JavaParameter[] getInputParameters() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public JavaParameter[] getOutputParameters() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
Pronto, finalizamos nossa classe, agora basta compilar nosso projeto e jogar no nosso projeto web na seguinte pasta: tomcat6/webapps/projeto_objeto/WEB-INF/classes.
Deve ficar na seguinte disposição:

Agora abra o WI, e vá na sessão de grids, lá você vai encontrar 3 opções de grid, grid sql, grid html e grid xml out. Clique em grid html
Em identificador coloque exemplogridjava, em tipo coloque JAVA, em início da linha, deixe como está e clique em gravar. Deverá ficar da seguinte maneira:

Após clicar em gravar, ele monta um layout padrão para nossa grid, para ver isto clique em modelo.
Deverá estar da seguinte maneira:
<html>
<body>
<table border="1" cellspacing="0">
<tr>
<td align="center"><b>JAVA</b></td>
</tr>
<tr>
<td>|coluna| </td>
</tr>
<tr>
<td colspan="10">
<p align="center">Empty</p>
</td>
</tr>
</table>
</body>
</html>
No nome Java coloque os nomes dos nossos campos, ou seja, Nome da Fruta, Peso, Valor e mais em embaixo no campo coluna, vamos colocar nossas variáveis, ou seja, tmp.ds_nome, tmp.nr_peso, tmp.nr_preco e no lugar do nome Empty, substitua por Nenhum registro encontrado e clique em gravar. Deverá ficar da seguinte maneira.
<html>
<body>
<table border="1" cellspacing="0">
<tr>
<td align="center"><b>Nome da Fruta</b></td>
<td align="center"><b>Peso</b></td>
<td align="center"><b>Valor</b></td>
</tr>
<tr>
<td>|tmp.ds_nome| </td>
<td>|tmp.nr_peso| </td>
<td>|tmp.nr_preco| </td>
</tr>
<tr>
<td colspan="10">
<p align="center">Nenhum registro encontrado</p>
</td>
</tr>
</table>
</body>
</html>
Após isto crie uma página de teste com o nome exemplogridjava. No pré-pagina existe uma opção grid java, clique nela. No campo nome da classe, coloque o caminho e nome complete da nossa classe que criamos, seria br.com.projetoteste.grids.ExemploGridJava e no campo Grid, selecione a grid que criamos no passo anterior. Deverá ficar da seguinte maneira:

Clique em editar html e coloque a chamada da nossa grid e clique em gravar, ficando da seguinte maneira:

Agora basta clicar em vizualizar:

Então é isso, fica aqui mais um tutorial para o pessoal que tinha dúvida de como implementar uma grid java. Grid Java pode salvar você quando fica impossível realizar lógicas ninjas com querys ou consumir algum webservice. Espero que tenha ajudado e abraços a todos.