Como capturar um valor de uma HtmlSelectOneMenu

2 respostas
Kleber-rr

Olá pessoal

Estou com um problema que pode ser simples para a maioria dos desenvolvedores: Preciso capturar o valor de uma HtmlSelectOneMenu que a princípio é null para comparar com um id tipo Long de outro objeto...
Segue abaixo o código do bean:

...
	private HtmlSelectOneMenu programaSelecionado = new HtmlSelectOneMenu();
	private HtmlSelectOneMenu servicoSelecionado = new HtmlSelectOneMenu();

	public HtmlSelectOneMenu getProgramaSelecionado() {
		return programaSelecionado;

	}

	public void setProgramaSelecionado(HtmlSelectOneMenu programaSelecionado) {

		this.programaSelecionado = programaSelecionado;

	}

	public HtmlSelectOneMenu getservicoSelecionado() {
		return servicoSelecionado;
	}

	public void setservicoSelecionado(HtmlSelectOneMenu servicoSelecionado) {
		this.servicoSelecionado = servicoSelecionado;
	}

	private ProgramaHandler pegaProgramaHandler() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		ELContext elContext = facesContext.getELContext();
		ELResolver resolver = facesContext.getApplication().getELResolver();
		Object p = resolver.getValue(elContext, null, "programaHandler");

		return (ProgramaHandler) p;
	}

	public List<SelectItem> getProgramaParaComboBox() {
		List<SelectItem> lista = new ArrayList<SelectItem>();

		ProgramaHandler handler = pegaProgramaHandler();
		for (Programa p : handler.getProgramas()) {
			// String id = Long.toString(p.getCod_programa());
			lista.add(new SelectItem(p, p.getNome()));

		}
		return lista;
	}

	private ServicoHandler pegaServicoHandler() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		ELContext elContext = facesContext.getELContext();
		ELResolver resolver = facesContext.getApplication().getELResolver();
		Object s = resolver.getValue(elContext, null, "servicoHandler");

		return (ServicoHandler) s;
	}

	public List<SelectItem> getServicoParaComboBox() {
		List<SelectItem> lista = new ArrayList<SelectItem>();
		ServicoHandler handler = pegaServicoHandler();
		System.out.println("Value of programa: " + programaSelecionado.getId());
		for (Servico s : handler.getServicos()) {
//aqui pensei em usar a logica q comentei acima: 
//if (programaSelecionado != null && programaSelecionado == s .getPrograma_cod_programa()) {
//...
			lista.add(new SelectItem(s, s.getNome()));
		}
		return lista;
	}

Eae, alguem pode me ajudar nisso??

2 Respostas

thiago.correa

Não consegui entender bem a sua dúvida, mas o uso do selectOneMenu é relativamente simples

public class MBean {
    private Long id;
    private List<SelectItem> lista = new ArrayList<SelectItem>();
    //getters and setters omitted
    public List<SelectItem> getLista() {
        lista.add(1, "Numero um");
        lista.add(2, "Numero dois");
        lista.add(3, "Numero três");
    }

   public String salvar() {
       System.out.println(id);
       return null;
   }
}

página jsp

<h:form>
<h:selectOneMenu value="#{mBean.id}">
    <f:selectItems value="#{mBean.id}" />
</h:selectOneMenu>
<h:commandButton action="#{mBean.salvar}" />
</h:form>
Kleber-rr

Realmente, o uso dele é simples, e eu consigo usar sem problemas. A questão é que estou precisando capturar o valor desse objeto ou de preferência o seu id Long. Já tentei várias coisas e só me retorna null…

Eae, alguma sugestão??

Criado 14 de janeiro de 2010
Ultima resposta 15 de jan. de 2010
Respostas 2
Participantes 2