Dúvida com o <h:selectOneMenu do jsf

Boa tarde galera estou com uma dúvida na tag <h:selectOneMenu tem vários itens buscados no banco de dados quero que toda vez que eu selecione alguma coisa la apareça no <h:outputText estou querendo criar um botao de pesquisa também que a partir do item selecionado pesquise todos os valores relacionados a este item selecionado. Segue abaixo o código da página

xhtml

		<h:form id="edicao">
		
			<h:panelGrid columns="5">
	    		
	    		<h:selectOneMenu id="categoria" value="#{lancamentoBean.editado.categoria}">
	    			<f:selectItems value="#{categoriaBean.categoriasSelect}"></f:selectItems>
	    		</h:selectOneMenu>
	   
	    		<h:outputText value=""></h:outputText>
	    	</h:panelGrid>
	  </h:form>

bean

package financeiro.lancamento;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;

import financeiro.categoria.Categoria;
import financeiro.cheque.Cheque;
import financeiro.cheque.ChequeId;
import financeiro.cheque.ChequeRN;
import financeiro.conta.Conta;
import financeiro.util.RNException;
import financeiro.web.ContextoBean;
import financeiro.web.util.ContextoUtil;


@ManagedBean(name="lancamentoBean")
@ViewScoped
public class LancamentoBean {

	private List<Lancamento> lista;
	private List<Double> saldos = new ArrayList<Double>();
	private float saldoGeral;
	private Lancamento editado = new Lancamento();
	private List<Lancamento> listaAteHoje;
	private List<Lancamento> listaFuturo;
	private Integer numeroCheque;
	private Categoria categoria = this.editado.getCategoria();
	
	public LancamentoBean(){
		this.novo();
	}
	
	
	public Categoria getCategoria() {
		return categoria;
	}



	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	
	public void novo(){
		this.editado= new Lancamento();
		this.editado.setData(new Date(System.currentTimeMillis()));
		this.numeroCheque = null;
	}
	
	public void editar(){
		Cheque cheque = this.editado.getCheque();
		if(cheque != null){
			this.numeroCheque = cheque.getChequeId().getCheque();
		}
	}
	
	public void salvar(){
		ContextoBean contextoBean = ContextoUtil.getContextoBean();
		this.editado.setUsuario(contextoBean.getUsuarioLogado());
		this.editado.setConta(contextoBean.getContaAtiva());
		
		
		ChequeRN chequeRN = new ChequeRN();
		ChequeId chequeId = null;
		
		if(this.numeroCheque != null){
			chequeId = new ChequeId();
			chequeId.setConta(contextoBean.getContaAtiva().getConta());
			chequeId.setCheque(this.numeroCheque);
			Cheque cheque = chequeRN.carregar(chequeId);
			FacesContext context = FacesContext.getCurrentInstance();
			if(cheque == null){
				FacesMessage msg = new FacesMessage("Cheque não cadastrado.");
				context.addMessage(null, msg);
				return;
			}else if(cheque.getSituacao() == Cheque.SITUACAO_CHEQUE_CANCELADO){
				FacesMessage msg = new FacesMessage("Cheque já cancelado.");
				context.addMessage(null, msg);
				return;
			}else{
				this.editado.setCheque(cheque);
				chequeRN.baixarCheque(chequeId, this.editado);
			}
		}
		
		LancamentoRN lancamentoRN = new LancamentoRN();
		lancamentoRN.salvar(this.editado);
		this.novo();
		this.lista = null;
	}
	
	public void excluir(){
		LancamentoRN lancamentoRN = new LancamentoRN();
		this.editado = lancamentoRN.carregar(this.editado.getLancamento());
		lancamentoRN.excluir(this.editado);
		this.lista = null;
	}
	
	public List<Lancamento> getLista(){
		if(this.lista == null){
			ContextoBean contextoBean = ContextoUtil.getContextoBean();
			Conta conta = contextoBean.getContaAtiva();
			
			Calendar dataSaldo = new GregorianCalendar();
			dataSaldo.add(Calendar.MONTH, -1);
			dataSaldo.add(Calendar.DAY_OF_MONTH, -1);
			
			Calendar inicio = new GregorianCalendar();
			inicio.add(Calendar.MONTH, -1);
			
			LancamentoRN lancamentoRN = new LancamentoRN();
			this.saldoGeral = lancamentoRN.saldo(conta, dataSaldo.getTime());
			this.lista = lancamentoRN.listar(conta, inicio.getTime(), null);
			this.saldos = new ArrayList<Double>();
			Categoria categoria = null;
			double saldo = this.saldoGeral;
			
			for (Lancamento lancamento : this.lista) {
				categoria = lancamento.getCategoria();
				saldo = saldo + (lancamento.getValor().floatValue() *categoria.getFator());
				//BigDecimal saldoItem = lancamento.getValor();
				//double saldoLista = saldoItem.doubleValue();  		
				this.saldos.add(saldo);
			}
		}
		
		return this.lista;
	}
	
	
	public List<Lancamento> getListaAteHoje() {
		
		if(this.listaAteHoje == null){
			ContextoBean contextoBean = ContextoUtil.getContextoBean();
			Conta conta = contextoBean.getContaAtiva();
			
			Calendar hoje = new GregorianCalendar();
			
			LancamentoRN lancamentoRN = new LancamentoRN();
			
			this.listaAteHoje = lancamentoRN.listar(conta, null,hoje.getTime());
		}
		
		
		return this.listaAteHoje;
	}

	public List<Lancamento> getListaFuturo() {
		
		if(this.listaFuturo == null){
			ContextoBean contextoBean = ContextoUtil.getContextoBean();
			Conta conta = contextoBean.getContaAtiva();
			
			Calendar amanha = new GregorianCalendar();
			amanha.add(Calendar.DAY_OF_MONTH, 1);
			
			LancamentoRN lancamentoRN = new LancamentoRN();
			
			this.listaFuturo = lancamentoRN.listar(conta, amanha.getTime(),null);
		}
		
		return this.listaFuturo;
	}
	
	public void mudouCheque(ValueChangeEvent event){
		Integer chequeAnterior = (Integer) event.getOldValue();
		if(chequeAnterior != null){
			ContextoBean contextoBean = ContextoUtil.getContextoBean();
			ChequeRN chequeRN = new ChequeRN();
			
			try {
				chequeRN.desvincularLancamento(contextoBean.getContaAtiva(), chequeAnterior);
			} catch (RNException e) {
				FacesContext context = FacesContext.getCurrentInstance();
				FacesMessage msg  = new FacesMessage(e.getMessage());
				context.addMessage(null, msg);
				return;
				
			}
		}
	}

	

	public List<Double> getSaldos() {
		return saldos;
	}

	public void setSaldos(List<Double> saldos) {
		this.saldos = saldos;
	}

	public float getSaldoGeral() {
		return saldoGeral;
	}

	public void setSaldoGeral(float saldoGeral) {
		this.saldoGeral = saldoGeral;
	}

	public Lancamento getEditado() {
		return editado;
	}

	public void setEditado(Lancamento editado) {
		this.editado = editado;
	}

	public void setLista(List<Lancamento> lista) {
		this.lista = lista;
	}

	public Integer getNumeroCheque() {
		return numeroCheque;
	}

	public void setNumeroCheque(Integer numeroCheque) {
		this.numeroCheque = numeroCheque;
	}

	public void setListaAteHoje(List<Lancamento> listaAteHoje) {
		this.listaAteHoje = listaAteHoje;
	}

	public void setListaFuturo(List<Lancamento> listaFuturo) {
		this.listaFuturo = listaFuturo;
	}
	
	

	
}

dentro do selectOneMenu, vc tem que coloca um <f:ajax> com o envento change para a mudança chamar o metodo que vc faça a outra pesquisa e update na tela… se você estiver usando o primefaces da 1 olhada no evento ajax dele… no site tem exemplo.

Aqui mostra como utilizar o ajax nesse caso: JSF Exemplos Simples com Ajax.