[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 
Valor do Combo box na listagem  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

Eu fiz um combo box statico que funciona direitinho na entrada de dados porem na listagem ele mostra o valor interno por exemplo
I Interrado
O OK

No combo da entrada de dados aparece certinho o "OK" pro exemplo porem na listagem aparece somente o "O" pois foi o valor que foi gravado no banco de dados como é que eu faço pelo FrameWork para que seja exibido a descrição referente ao valor do banco???

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

Eu não entendi a dúvida guilherme, teria como ser mais específico? posta o código do seu bean e também do seu jsp de entrada/saída.

té!

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

Na classe do crud eu criei um lista com os itens estaticos de um combo box:
Code:
	public ModelAndView doEntrada(WebRequestContext request, NivelPiezometro form) throws CrudException {
 		Hashtable<String, String> hashtable = new Hashtable<String, String>();
 		hashtable.put("I","Interditado");
 		hashtable.put("D","Destruído");
 		hashtable.put("E","Entupido");
 		hashtable.put("O","Ok");		
 		request.setAttribute("listaStatus", hashtable);
 		return super.doEntrada(request, form);
 	}
 


na entrada de dados na propriedade que vai virar o combo eu coloquei esse parametro e funcionou:

Code:
			<t:property name="status" itens="${listaStatus}"/>
 


porem na listagem quando eu crio um novo registro e o sistema vai para a listagem o valor do campo não fica a descrição e sim o codigo interno que foi gravado no banco como por exemplo, quando eu escolho "Interditado" na listagem aparece "I" como é que eu faço para que ao inves do "I" ele apareça "Interditado"??????


No aguardo,

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, primeiro ponto que quero lhe chamar a atenção é que o método que deve ser extendido é o entrada(WebRequest....)


Code:
 @Override
 	protected void entrada(WebRequestContext request, Bean bean) throws Exception {
 		
 	}
 


o doEntrada tem a função apenas de mandar para o jsp correto em cada situação, no caso a entrada de dados.

O problema da listagem é o seguinte.. você pode fazer e sobrescrever o getLista e alterar a lista que vai para o datagrid. assim:

Code:
 protected ListagemResult<Bean> getLista(WebRequestContext request, FiltroListagem filtro) {
 		ListagemResult<Bean> result = super.getLista(request, filtro);
 		List<Bean> list = result.list();
 		
 		for (Bean bean : list) {
 			//carrega aqui os dados
 		}
 		
 		return result;
 	}
 


Ai no seu caso seria ideal que você colocasse esse hash map no service do seu bean e depois carregasse..


primeiro você poe o service na action assim:
Code:
 protected BeanService beanService;
 
 public void setBeanService(BeanService beanService){
     this.beanService = beanService
 }
 


cria um método dentro do seu BeanService:

Code:
 public Hashtable<String, String> getListaAlgumaCoisa(){
 Hashtable<String, String> hashtable = new Hashtable<String, String>();
  		hashtable.put("I","Interditado");
  		hashtable.put("D","Destruído");
  		hashtable.put("E","Entupido");
  		hashtable.put("O","Ok");		
 return hashtable;
 }
 


ai voltando a sua action faz assim:

Code:
 protected ListagemResult<Bean> getLista(WebRequestContext request, FiltroListagem filtro) {
 		ListagemResult<Bean> result = super.getLista(request, filtro);
 		List<Bean> list = result.list();
 		
 		for (Bean bean : list) {
 			bean.setPropriedade(beanService.getListaAlgumaCoisa().get(bean.getPropriedade()));
 		}
 		
 		return result;
 	}
 


e no entrada você muda para

Code:
 @Override
 	protected void entrada(WebRequestContext request, Bean bean) throws Exception {
 		request.setAttribute("listaStatus", beanService.getListaAlgumaCoisa());
 	}
 



entendeu???

[]'s

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

Perfeito, muito obrigado!!!!!!

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

Guilherme, você pode no método getLista algo do tipo

Code:
ListagemResult<Bean> result = super.getLista(request, filtro);
 List<Bean> list = result.list();
 		
 for (Bean bean : list) {
      if("o".equals(bean.getValor()){
           bean.setValor("Ok");
      }
     ...
 }


Para o modo output não é possível utilizar um map e o NEO fazer a tradução automática como no caso do combo. Mas isso é interessante e vou adicionar essa funcionalidade numa versão futura.

Uma outra possibilidade é alterar o JSP

Code:
<t:tabelaResultados>
      <t:property name="..."/>
      <n:column header="titulo">
           <c:if test="${nomeDoBean.valor == 'O'}">Ok</c:if>
           <c:if test="${nomeDoBean.valor == 'I'}">Interrado</c:if>
      </n:column>
 </t:tabelaResultados>


No nomeDoBean você coloca o nome da classe do bean com a primeira letra minúscula.
Se estiver utilizando um dataGrid diretamente utilize row (ou configure o atributo var do dataGrid para indicar com qual nome o bean estará no escopo)

Uma outra forma ainda é criar um Enum
Code:
 public enum Tipo {
     OK, INTERRADO
 }


Será impresso na tela OK e INTERRADO, mas no banco será salvo um int.

Você pode mudar o valor impresso sobrescrevendo to toString do enum.

Code:
public enum Tipo {
     OK, INTERRADO;
 	
     @Override
     public String toString() {
         switch(this){
 	case OK: return "Ok";
 	case INTERRADO: return "Interrado";
         }
         return super.toString();
     }
 }

}
 
Índice dos Fóruns -> Dúvidas
Ir para:   
Powered by JForum 2.1.7 © JForum Team