Você está aqui: JSF - Java Server Faces ::: JSF HTML Tags ::: e

Como responder ao evento valueChangeListener de um controle <h:selectOneMenu> para detectar mudança de seleção

Quantidade de visualizações: 9346 vezes
O evento valueChangeListener de um controle <h:selectOneMenu> é disparado quando o usuário muda o valor selecionado no controle. Quando isso acontece, o evento é disparado e pode ser interceptado a partir de um bean gerenciado JSF. O método que deverá tratar o evento no bean têm acesso a um objeto da classe ValueChangeEvent, o que nos permite obter o UIComponent que gerou o evento assim como os valores exibidos antes e depois da seleção.

Vamos ver um exemplo? Observe o código para uma página JSP ou Facelets que contém um controle <h:selectOneMenu> e um botão <h:commandButton>:

Código para index.xhtml:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Estudos JSF</title>
    </h:head>
    <h:body>
       <h4>Cadastro de Filmes</h4>

       <h:form>

          Categoria:<br />
          <h:selectOneMenu id="categoria" value="#{filme.genero}"
            valueChangeListener="#{filme.tratarMudancaGenero}" onchange="submit()">
              <f:selectItem itemValue="Terror" itemLabel="Terror" />
              <f:selectItem itemValue="Comédia" itemLabel="Comédia" />
              <f:selectItem itemValue="Aventura" itemLabel="Aventura" />
          </h:selectOneMenu>
    
          <h:commandButton id="submit" value="Gravar Dados"
            action="#{filme.gravar}" />

          <h:outputText value="#{filme.msg}" />

       </h:form>

    </h:body>
</html>

Começamos atribuindo o valor "#{filme.genero}" ao atributo value do controle <h:selectOneMenu>. No bean Filme a variável genero é do tipo String. Em seguida nós informamos que, no evento valueChangeListener do controle <h:selectOneMenu>, o método tratarMudancaGenero() do bean Filme deverá ser chamado. Veja agora o código para este bean:

Código para Filme.java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package entidades;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ValueChangeEvent;

@ManagedBean
@SessionScoped
public class Filme {
    private String genero;
    private String msg = "Resultado";

    public Filme() {
    }

    // método que detecta e trata a mudança de seleção no
    // controle <h:selectOneMenu>
    public void tratarMudancaGenero(ValueChangeEvent event){
        setMsg("O gênero foi alterado de " + event.getOldValue() + " para "
          + event.getNewValue());
    }

    // método que intercepta o envio do formulário
    public String gravar(){
        // vamos atualizar a variável msg
        this.setMsg("Formulário enviado com sucesso.");

        // vamos voltar para a página inicial
        return "index";
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

Note que no método tratarMudancaGenero() do bean Filme nós exibimos o valor antigo e o novo valor do controle <h:selectOneMenu>. É importante observar que o evento valueChangeListener, por si só, não funciona se o formulário não for enviado após a seleção. Por isso, incluímos uma chamada à submit() no evento onchange. Veja:

onchange="submit()"

Por fim, note que o envio do formulário feito pela mudança de seleção <h:selectOneMenu> é completamente diferente daquele feito pelo botão <h:commandButton>. Para que você veja a diferença, incluí também uma chamada ao método gravar() do bean feita quando o formulário é enviado clicando-se no botão.

Link para compartilhar na Internet ou com seus amigos:

Vamos testar seus conhecimentos em

Vigas a flexão simples: seções retangulares

As ações permanentes atuam na estrutura durante toda a sua vida útil, podendo apresentar poucas variações. Em vigas de concreto armado, essas ações normalmente são os carregamentos de paredes, das lajes apoiadas sobre elas e do seu próprio peso.

Imagine uma viga de concreto V (15x40) que sustenta uma parede com 18cm de espessura e suporta duas lajes. O pé-direito da edificação é de 3,00m e tanto a viga que sustenta a parede quanto a no topo desta têm altura de 40cm. Considere que as reações de apoio das lajes nessa viga são de 3,55kN/m e 5,40kN/m.

Nesse cenário, qual é o carregamento dessa viga?

A) 10,45kN/m.

B) 11,84kN/m.

C) 13,89kN/m.

D) 15,39kN/m.

E) 16,15kN/m.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Qual é a forma correta de se invocar uma função JavaScript chamada "calcular"?

A) call function calcular();

B) calcular();

C) def call calcular();

D) call calcular();
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Python

Qual o resultado da execução do seguinte código Python?

valor = 76.1234
print("O valor é: %0.2f" % valor)

A) O valor é: 76.00

B) O valor é: 76.12

C) O valor é: 0076

D) O valor é: 0.76

E) O valor é: 76.13
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira

Ações em estruturas: apresentação dos principais carregamentos na análise de estruturas convencionais

Qual das alternativas a seguir possui exemplos, na ordem correta de ações: permanentes diretas, permanentes indiretas, acidentais diretas, acidentais indiretas e excepcionais.

A) Peso próprio, variações de temperatura, cargas móveis, protensão e terremotos.

B) Peso próprio, protensão, vento, variações de temperatura e terremotos.

C) Deslocamento de apoio, imperfeições geométricas, vento, variações de temperatura e terremotos.

D) Peso próprio, imperfeições geométricas, vento, força longitudinal de frenagem e explosões.

E) Peso próprio, imperfeições geométricas, vento, variações de temperatura e cargas verticais de uso da construção.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em AutoCAD Civil 3D

Topografia no Civil 3D

São linhas usadas para representar a topografia, mostrando as mudanças de elevação no terreno. Essas linhas conectam posições com a mesma elevação em uma superfície.

Estamos falando de:

A) Control Points (Pontos de Controle)

B) Breaklines (Linhas de Quebra)

C) Contour Lines (Curvas de Nível)

D) Feature Lines (Linhas de Características)

E) Parcels (Parcelas, Lotes)
Verificar Resposta Estudar Cards Todas as Questões

Veja mais Dicas e truques de JSF - Java Server Faces

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 26 usuários muito felizes estudando em nosso site.