Fazer select dinâmico que busca dados do banco

2 respostas
I

boa noite pessoal…

estou precisando fazer um select dinâmico em jsf 1.2, a idéia é o seguinte, eu tenho um select que busca unidades de um banco dados, quando eu marcar uma opção eu quero que um outro select apareça embaixo com os cursos disponíveis para essa unidade… eu quero fazer isso com as bibliotecas a4j e richfaces, pois só quero que o segundo select apareça quando eu marcar alguma opção no primeiro select… buscar os dados do banco pro select é tranquilo, a minhas dúvidas são:

  1. não sei quais tags e atributos do a4j usar para mostrar o segundo select quando o primeiro tiver uma opção seleciona.

  2. não estou conseguindo fazer o segundo select interagir com o primeiro, eu tentei chamar um metodo do managed ben dentro de um atributo actionlistener do primeiro select mas nao estou conseguindo fazer direito.

esta difícil fazer, gostaria de alguns exemplos, pois não vejo nenhum exemplo buscando do banco de dados, e gostaria de saber como passar um identificador do primeiro select corretamente para o bean para poder trazer os dados do segundo select…

obrigado desde ja…

2 Respostas

S

Olá amigo

acho que isso pode lhe ajudar:

Bean

public List<SelectItem> getSelectGrupo() {
		
		Map<Long, SelectItemGroup> mapa = new HashMap<Long, SelectItemGroup>();
		
		List<Grupo> gruposPais = getGruposPai();
		
		List<Grupo> grupos = grupoService.pesquisar(new Grupo());
		
		for(Grupo grupo : gruposPais){
			// inicia os grupos sub a raiz
			if(grupo.getGrupo() == null || grupo.getGrupo().getId() == null){
			      SelectItemGroup selectOptGroup = new SelectItemGroup(grupo.getNome());
			      selectOptGroup.setDisabled(true);
			      selectOptGroup.setSelectItems(new SelectItem[]{});
			      mapa.put(grupo.getId(), selectOptGroup);
//			      items.add(selectOptGroup);
			}
		}
		
		for(Grupo grupo : grupos){
			// anexa os filhos ao grupo pai
			if(grupo.getGrupo() != null && grupo.getGrupo().getId() != null){
				SelectItemGroup grupoPai = mapa.get(grupo.getGrupo().getId());
				
				if(grupoPai == null){
					continue;
				}
				
				SelectItem[] selectItems = grupoPai.getSelectItems();
				
				if(selectItems == null){
					selectItems = new SelectItem[]{};
				}
				
				List<SelectItem> selectItemsList = new ArrayList<SelectItem>(Arrays.asList(selectItems));
				selectItemsList.add(new SelectItem(grupo.getId(), grupo.getNome()));
				grupoPai.setSelectItems((SelectItem[])selectItemsList.toArray(new SelectItem[selectItemsList.size()]));
			}
		}
		
		List<SelectItem> items = new LinkedList<SelectItem>();
		for(Long idGrupo : mapa.keySet()){
			SelectItemGroup selectGrupo = mapa.get(idGrupo);
			selectGrupo.setDisabled(false);
			items.add(selectGrupo);
		}
		//items.addAll(mapa.values());
	    
		return items;
	}

xhtnl:

<h:outputLabel  value="Grupo" />
		               <h:selectOneMenu id="grupoid_suggestion" value="#{grupoMBean.grupo.grupo.id}" required="false">
		                       <f:selectItem itemValue="" itemLabel="--Selecione--" />
		                       <c:forEach items="#{grupoMBean.gruposPai}" var="grupo">
		                           <f:selectItem itemValue="#{grupo.id}" itemLabel="#{grupo.nome}" />
		                       </c:forEach>
		               </h:selectOneMenu>

Silvio Guedes

I

Gostei do seu exemplo Sílvio, ele me clareou um pouco mais as idéias
Obrigado pela ajuda

Criado 18 de abril de 2011
Ultima resposta 20 de abr. de 2011
Respostas 2
Participantes 2