[extJS] Grid aparecendo sem header / Java+Struts [URGENTE]

5 respostas
romuloff

[color=red]*EDIT: o problema de nao aparecer nem os resultados foi resolvido e esta descrito na proxima resposta. Mas o problema de nao aparecer o header/cabeçalho das colunas ainda persiste ![/color]

Olá pessoal,

Estou utilizando o ExtJS para montar grids em um sistema java + struts 1 ( :( ); mas nao estou conseguindo achar solução para o problema atual.
A grid chega a aparecer mas sem os resultados. O json que estou enviando para a pagina está correto.
A implementação da grid é baseada no gridFilter.js dos exemplos do Ext.

Na pagina a unica coisa que tem é o div: <div id="grid-empresa"></div>"

Meu código java acho que nao precisa né ?
Somente informar que o json a seguir está sendo enviado pro request assim:
"request.setAttribute( Constantes.REQUEST_VAR_JSON, strJson );"

json no request:
{"total":"1","data":[{"empresaId":1,"nome":"nomeeeee","nomeFantasia":"nomeeeeeFannnnntasiaaaa"}]}

O javascript:
/*
 * Ext JS Library 2.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * [email removido]
 * 
 * http://extjs.com/license
 */

Ext.onReady(function(){
	
	/** Seta o caminho das imagens **/
	Ext.menu.RangeMenu.prototype.icons = {
	  gt: path+'/imagens/ext/greater_then.png', 
	  lt: path+'/imagens/ext/less_then.png',
	  eq: path+'/imagens/ext/equals.png'
	};
	Ext.grid.filter.StringFilter.prototype.icon = path+'/imagens/ext/find.png';
	
	/** Seta a implementação padrão do Provider que salva os estados via cookie **/
	Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
	
	/** Leitor para o Json gerado a cada requisição do Proxy **/	
	var dsReader = new Ext.data.JsonReader({
	  root: 'data',
	  totalProperty: 'total'
	},[ 
		{name:'empresaId'},
		{name:'nome'},
		{name:'nomeFantasia'}
	  ]
	);
    
	var httpProxy = new Ext.data.HttpProxy({
	  url: path+'/gerenciaEmpresa.do?acao=retrieveGrid'
	});
	
	var groupingStore = new Ext.data.GroupingStore({
		proxy: httpProxy,
		reader: dsReader,
		remoteSort: true,
		sortInfo:{field: 'empresaId', direction: "ASC"}
	});	
	
    var pagingToolbar = new Ext.PagingToolbar({
	  store: groupingStore,
	  pageSize: 15,
	  plugins: filters,
	  displayInfo: true,
	  displayMsg: 'Mostrando Registros {0} - {1} de {2}',
	  emptyMsg: "Nenhum registro para mostrar",
	  items:[
	    '-', 
	    {text: 'Limpar Filtros', handler:function(){filters.clearFilters();}}
	  ]
	});
    
	var filters = new Ext.grid.GridFilters({
	  filters:[
	    {type: 'numeric',  dataIndex: 'empresaId'},
	    {type: 'string',  dataIndex: 'nome'},
	    {type: 'string',  dataIndex: 'nomeFantasia'}
	]});
	
	var columnModel = new Ext.grid.ColumnModel([
	  {dataIndex: 'empresaId', header: 'ID', width: 70},
	  {dataIndex: 'nome', header: 'Nome', width: 120},
	  {dataIndex: 'nomeFantasia', header: 'Nome Fantasia', width: 130}
	]);
	columnModel.defaultSortable = true;
	
	var grid = new Ext.grid.GridPanel({
	  id: 'gridEmpresa',
	  title: 'Empresas Cadastradas',
	  ds: groupingStore,
	  cm: columnModel,
	  enableColLock: false,
	  loadMask: true,
	  plugins: filters,
	  height:300,
	  width:900,        
	  el: 'grid-empresa',
	  bbar: pagingToolbar,
      tbar:[]
	});
	
//	grid.on('rowdblclick',function(){
//      	var codigo = grid.getSelectionModel().getSelected().get('empresaId');
//        location.href = path+"/pesquisarEmpresa.do?acao=carregar&impresaId="+codigo;
//    });
	
	//Limpa os filtros da grid
	filters.clearFilters();
	
	grid.render();
	
	groupingStore.load({params:{start: 0, limit: 15}});
	
});

Como aparece na tela:
[img]http://i26.photobucket.com/albums/c108/romuloff/tela-empresas.jpg[/img]

5 Respostas

romuloff

Para aparecer os resultados, mudei um pouco o fluxo de pagina/request no struts-config.
Agora falta aparecer o “header” das colunas :frowning:
[size=16][color=red]Alguem me ajuda !?!?!?!? Preciso resolver isso urgentemente ![/color][/size]

O que era assim:

<action path="/gerenciaEmpresa" name="form" type="br.com.ctbc.avalia.controller.action.GerenciaEmpresaAction" scope="request" parameter="acao" validate="false"> <forward name="success" path="tiles.gerenciaEmpresa"/> <forward name="fail" path="tiles.gerenciaEmpresa"/> </action>
no action:

return mapping.findForward( Constantes.FORWARD_SUCESSO );

Agora eh assim:

<action path="/gerenciaEmpresa" name="form" type="br.com.ctbc.avalia.controller.action.GerenciaEmpresaAction" scope="request" parameter="acao" validate="false"> <forward name="success" path="tiles.gerenciaEmpresa"/> <forward name="loadGrid" path="/pages/app/gerencia/recebeRequestGrid.jsp"/> <forward name="fail" path="tiles.gerenciaEmpresa"/> </action>
no action:

return mapping.findForward( Constantes.FORWARD_GRID );

No caso a solução veio pq minha pagina “tiles.gerenciaEmpresa” é a composição de todas as paginas que montam a pagina de gerenciamento de empresas.
Entao criei a pagina recebeRequestGrid.jsp e nela somente coloquei assim:
“<%=request.getAttribute(“json”) %>”

rchgonzaga

fala Romulo, blz?

Cara, ja viu se ta realmente retornando algo dessa action ??

o que o ExtJS espera ?? Json ? XML ?

Att.

romuloff

Olá rchgonzaga.
Ví sim. Estou em modo debug tanto no Action como na execução do javascript.

O extJs espera um JSON que está indo corretamente para a pagina.
Tanto que agora já está mostrando os resultados (solucao na segunda resposta do topico).
Como está a grid agora (crop) :

[color=red]Mas agora falta aparecerem os cabeçalhos/headers das colunas.
Este meu código é pra ficar igual à este exemplo do extJS: http://extjs.com/deploy/dev/examples/grid-filtering/grid-filter.html
Mas o javascript tem algumas mudanças pelo fato do meu projeto ser em Java+struts. O javascript atual é o mesmo do inicio do topico.[/color]
Podem ver no exemplo do link acima que o título das colunas ao clicar do lado faz bastante coisa … entao tá dando algum problema aí no meio do meu javascript que na verdade nao esta sendo tratado como um erro pelo interpretador … entao seria mais algo como “está faltando algo”.

rchgonzaga

Blezera Romulo

Achei que estava com problemas ainda rsrsrsr, eu sei que esta utilizando o extJs, mais vai uma dica. Eu uso o FlexGrid do Jquery segue link:
http://www.flexigrid.info/

Muito facil de usar, caso tenha alguma dúvida, poste ai, não sou expert, mais ja desenvolvi varias aplicações usando este componente.

Uma vantagem dele em relação aos que ja pesquisei, é que ele permite rolagem horizontal, ou seja, se vc precisa de um grid extenso, esse ai é o cara!

forte abraço!

Rafael Gonzaga

romuloff

rchgonzaga:
Blezera Romulo

Achei que estava com problemas ainda rsrsrsr, eu sei que esta utilizando o extJs, mais vai uma dica. Eu uso o FlexGrid do Jquery segue link:
http://www.flexigrid.info/

Muito facil de usar, caso tenha alguma dúvida, poste ai, não sou expert, mais ja desenvolvi varias aplicações usando este componente.

Uma vantagem dele em relação aos que ja pesquisei, é que ele permite rolagem horizontal, ou seja, se vc precisa de um grid extenso, esse ai é o cara!

forte abraço!

Rafael Gonzaga

eaew Rafael. Muuito obrigado pela dica.
A verdade é que eu ainda estou com problemas sim. como descrito na minha ultima resposta ainda falta formar o header das colunas.
Coloquei uma imagem no meio e realmente achei q muitos iriam interpretar que está solucionado.
Mas nao esta solucionado. vide minha ultima resposta

Estou achando q é algum problema de css.
pq acabei de clicar no header com o firebug e o código está lá
e selecionando todo o texto da pagina com ctrl+A o texto vem na area de transferencia ao utilizar ctrl C e ctrl V.

Criado 26 de maio de 2009
Ultima resposta 26 de mai. de 2009
Respostas 5
Participantes 2