[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Alterar o tipo de consulta de Filtragem por seleção de Campo  XML
Índice dos Fóruns -> Dúvidas
Autor Mensagem
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Boa tarde, gostaria de saber como faço no FrameWork para que o filtro ao inves de formulario de consulta, o usuario pudesse escolher o campo de consulta em um combo, preencher um outro campo com o valor do filtro e assim ele fizesse a pesquisa sem que fosse necessar mostrar todo o formulario.

Obrigado,

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Guilherme, no bean do filtro faz assim?

Code:
 class Teste extends Filto....{
      Bean bean;
 
 
     get...
     set...
 }
 


Endendeu?

Ao invés de você usar o tipo, como String, Integer etc.. Você usa o objeto que você quer o combo, assim o neo converte automaticamente para combo.

teh!

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Oque eu quero não é que o valor seja um combo isso funciona corretamente eu quero que no meu caso é o seguinte:

Eu tenho o filtro
Code:
 public class AreaFiltro extends FiltroListagem {
 	String sigla;
 	String nome;
 	Projeto projeto;
                 ......
 


e na listagem:

Code:
 <t:tabelaFiltro>
         	<t:property name="nome"/>
         	<t:property name="sigla"/>
 	<t:property name="projeto"/>
 </t:tabelaFiltro>
 


é o dao:

Code:
 public void updateListagemQuery(QueryBuilder<Area> query, FiltroListagem _filtro) {
         AreaFiltro filtro = (AreaFiltro) _filtro;
         query.whereLike("area.nome", filtro.getNome())
         	 .whereLike("area.sigla", filtro.getSigla())
               .where("area.projeto = ?", filtro.getProjeto());
 	}
 


quando abro a aplicação o framework faz o filtro do jeito certo em forma de formulario em cima da listagem, porem, eu gostaria que esse filtro fosse de outra forma.

Em que o campo de consulta fosse selecionado em um combo que nesse caso conteria tres item Nome, sigla e Projeto quando o usuario selecionar o campo Sigla por exemplo e tambem preencher um text que estaria na frete do combo, o sistema faria a consulta somente com o campo Sigla.

Estou pedindo isso pois é o padrão aqui da empresa.

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Você pode criar um campo do tipo combo, e setar o valor do atributo reloadOnChange para true.

Isso fará com que toda vez que o combo for modificado seja feito um reload da tela.

No JSP você pode utilizar a tag c:if para determinar quais campos devem ser mostrados.

rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Você pode utilizar Javascript também..


Tem como até ficar automático

Modificando os templates da listagem...
Vou verificar como isso pode ser feito via javascript e assim que tiver um exemplo eu te mando o código...


Na sua empresa vc faz com reload da tela ou via javascript?
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Via javaScript a ideia seria fazer de uma for que eu não teria que fazer um para cada tela,


Fiz uma alteração no template ListagemTag.jsp para que os campos do filtro so fossem exibidos depois que o usuario apertasse o botão "Filtro" ao lado do botão "Criar".
No tamplate TabelaFiltroTag.jsp eu criei um botão que limpa o filtro e execulta a comsulta novamente sem os filtros, ficou legal.


Estou no aguardo deste codigo ... por enquanto vou tentar fazer oque vc falou!!!! Valeu!!!!

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Guilherme,

aqui na empresa eu passei por um problema semelhante...

e resolvi assim:

Quando a pessoa loga, ela passa por uma tela de seleção de empresa/projeto..

ai ela passa a trabalhar apenas com esta empresa/projeto e estes dados ficam na seção..

ai nao precisa da pessoa toda hora ficar selecionando os mesmos dados!

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Acabou que do framework foi só o 'clearFilter' mesmo... heheh


Code:
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="n" uri="neo"%>
 <%@ taglib prefix="t" uri="template"%>
 
 <t:listagem>
 	<%-- Isso força o formulário ser limpo no servidor --%>
 	<input type="hidden" name="clearFilter" value="true"/> 
 	
 	<t:janelaFiltro>
 		<t:tabelaFiltro>
 			<t:property name="filtrarPor" type="select-one" includeBlank="false"/>
 			<t:property name="descricao"/>
 			<t:property name="piezometro"/>
 		</t:tabelaFiltro>
 	</t:janelaFiltro>
 	<t:janelaResultados>
 		<t:tabelaResultados>
 			<t:property name="id" />
 			<t:property name="descricao" />
 			<t:property name="piezometro" />
 		</t:tabelaResultados>
 	</t:janelaResultados>
 </t:listagem>
 
 <script type="text/javascript">
 	
 	function Filter(row, input, label){
 		this.row = row;
 		this.input = input;
 		this.label = label;
 	}
 	
 	function registrarFiltros(){
 		var filtrarPor = document.forms[0].filtrarPor;
 		var table = findTable(filtrarPor);
 		var filters = findFilters(table);
 		
 		for(var i = 0; i < filters.length; i++){
 			var filter = filters[i];
 			var op = new Option(filter.label,filter.input.name);
 			op.filter = filter;
 			filtrarPor.options.add(op);
 			if(filter.input.name == '${param.filtrarPor}'){
 				filtrarPor.selectedIndex = i;
 			}
 		}
 		
 		filtrarPor.onchange = function(){
 			var selectedOp = filtrarPor.options[filtrarPor.selectedIndex];
 			for(var i = 0; i < filters.length; i++){
 				var filter = filters[i];
 				if(filter == selectedOp.filter){
 					filter.input.disabled = false;					
 					filter.row.style.display = '';
 				} else {
 					filter.input.disabled = true;
 					filter.row.style.display = 'none';					
 				}
 			}
 		};
 		
 		filtrarPor.onchange();
 	}
 	
 	/*
 	 * Acha a tabela imediatamente superior
 	 */
 	function findTable(obj){
 		while(obj && obj.tagName && obj.tagName.toLowerCase() != 'table'){
 			obj = obj.parentNode;
 		}
 		return obj;
 	}
 	
 	function findFilters(table) {
 		var rows = table.rows;
 		var filters = new Array();
 		for(var i = 1; i < rows.length; i++){
 			var row = rows[i];
 			var input = findInput(row.cells[1]); //o input tem que estar no segundo TD
 			var label = row.cells[0].innerHTML;
 			filters.push(new Filter(row, input, label));
 		}
 		return filters;
 	}
 	
 	function findInput(cell){
 		//achar o input
 		var childs = cell.childNodes;
 		for(var i = 0; i < childs.length; i++){
 			var child = childs[i];
 			if(child.tagName && (child.tagName.toLowerCase() == 'input' || child.tagName.toLowerCase() == 'select')){
 				return child;
 			}
 		}
 	}
 	
 	registrarFiltros();
 </script>
 
 
Índice dos Fóruns -> Dúvidas
Ir para:   
Powered by JForum 2.1.7 © JForum Team