Como pegar o valor de um selectitems?

12 respostas
A

Galera tenho um <p:selectManyCheckbox> assim

<p:selectManyCheckbox id="ProvaSelecao" widgetVar="ProvaSelecao" value="#{inscricaoController.provasSelecionadas}" layout="pageDirection" required="true" requiredMessage="Campo prova: o valor é necessário."> <f:selectItems value="#{inscricaoController.listarProvasDisponiveis()}" var="prova" itemValue="#{prova.id}" itemLabel="#{prova.data} - #{prova.nome}"></f:selectItems> </p:selectManyCheckbox>

Preciso validar no banco cada check que o usuario click, para saber se ele ja selecionou essa prova antes.
Tem como fazer isso ?
Alguem pode me dar uma ideia ou um exemplo ?
Obrigado

12 Respostas

Rodrigo_Sasaki

você vai precisar implementar um valueChangeListener pra esse componente, e a cada alteração pode fazer o que quiser.

Já implementou algum antes?

A

Ainda nao fiz nada. to começando agora com javaEE jsp e hibernate … usando o primefaces !
queria se nao for pedir muito um exemplo .
Obrigado pela ajuda !

Rodrigo_Sasaki
@ManagedBean
public class InscricaoController{

    public void meuValueChangeListener(ValueChangeEvent event){
        /* Aqui é um método normal, você pode acessar o banco aqui, 
         * mas lembre-se que ele será executado SEMPRE que o valor do componente for alterado
         */
    }

}
e no seu componente associa ele assim:
<p:selectManyCheckbox id="ProvaSelecao" widgetVar="ProvaSelecao" 
    value="#{inscricaoController.provasSelecionadas}" layout="pageDirection" 
    required="true" requiredMessage="Campo prova: o valor é necessário."
    valueChangeListener="#{inscricaoController.meuvalueChangeListener}">    
    <f:selectItems  value="#{inscricaoController.listarProvasDisponiveis()}" var="prova" 
        itemValue="#{prova.id}" itemLabel="#{prova.data} - #{prova.nome}">
    </f:selectItems>  
</p:selectManyCheckbox>
leobmx

Você já experimentou olhar a demo do primefaces, com ele você consegue fazer tudo isso da uma olhada como exemplo tem esse código aqui:

<h:form>  
  
    <p:selectCheckboxMenu value="#{formBean.selectedMovies}" label="Movies">  
        <f:selectItems value="#{formBean.movies}" />  
    </p:selectCheckboxMenu>  
  
    <p:separator style="margin-bottom:10px"/>  
  
    <p:commandButton value="Submit" update="display" oncomplete="dlg.show()" />  
  
    <p:dialog header="Selected Movies" modal="true" showEffect="fade" hideEffect="fade" widgetVar="dlg" resizabled="false">  
        <p:dataList id="display" value="#{formBean.selectedMovies}" var="movie">  
            #{movie}  
        </p:dataList>  
    </p:dialog>  
  
</h:form>

e no seu bean

import java.io.Serializable;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
  
public class FormBean implements Serializable {  
  
    private List<String> selectedMovies;  
  
    private Map<String,String> movies;  
  
    public FormBean() {  
        movies = new HashMap<String, String>();  
        movies.put("Scarface", "Scarface");  
        movies.put("Goodfellas", "Goodfellas");  
        movies.put("Godfather", "Godfather");  
        movies.put("Carlito's Way", "Carlito's Way");  
    }  
  
    public List<String> getSelectedMovies() {  
        return selectedMovies;  
    }  
    public void setSelectedMovies(List<String> selectedMovies) {  
        this.selectedMovies = selectedMovies;  
    }  
  
    public Map<String, String> getMovies() {  
        return movies;  
    }  
}

você só vai precisar usar a annotation @Named no seu bean se não me engano ela é do primefaces ou do jsf 2.

A

humm ja tinha olhado no primeface mas nao tinha encontrado nada que me ajudasse
Agora vou testar esse codigo do digaoneves e ver se consigo.
Deis de ja agradeço a ajuda de voces vlw mesmo digaoneves .

robsonperassoli

Buenas pessoal.

Estou tendo um problema parecido. O exemplo do primefaces funciona que é uma beleza, porém quando tento usar um List de um Bean qualquer, mesmo criando um converter não funciona.

Não gera erro nem nada, não sei o que fazer.

Segue meu código jsf:

<h:form>    
    <p:selectManyCheckbox value="#{testeMB.selectedPessoas}" label="Pessoas"  converter="pessoaConverter">    
        <f:selectItems value="#{testeMB.pessoas}" var="pessoa" itemLabel="#{pessoa.nome}" itemValue="#{pessoa}" />
    </p:selectManyCheckbox>    

    <p:separator style="margin-bottom:10px"/>    

    <p:commandButton value="Submit" update="display2" oncomplete="dlg2.show()" />    

    <p:dialog header="Selected Pessoas" modal="true" showEffect="fade" hideEffect="fade" widgetVar="dlg2" resizabled="false">    
        <p:dataList id="display2" value="#{testeMB.selectedPessoas}" var="pessoa">    
            #{pessoa.nome}    
        </p:dataList>    
    </p:dialog>    

</h:form>

E do meu ManagedBean:

@ManagedBean
@ViewScoped
public class TesteMB implements Serializable {
    private List<Pessoa> selectedPessoas;
    private List<Pessoa> pessoas;

    public TesteMB() {
        pessoas = new ArrayList<Pessoa>();
        pessoas.add(new Pessoa(1, "Pessoa 1"));
        pessoas.add(new Pessoa(2, "Pessoa 2"));
        pessoas.add(new Pessoa(3, "Pessoa 3"));
    }

    public List<Pessoa> getPessoas() {
        return pessoas;
    }

    public void setPessoas(List<Pessoa> pessoas) {
        this.pessoas = pessoas;
    }

    public List<Pessoa> getSelectedPessoas() {
        return selectedPessoas;
    }

    public void setSelectedPessoas(List<Pessoa> selectedPessoas) {
        this.selectedPessoas = selectedPessoas;
    }

}

Desde já obrigado

mariofcc

Eu estou com um problema parecido, não consigo recupera os itens selecionados.
Ele não entra no método.

<p:fieldset id="filtroGrafico" legend="Filtro" toggleable="true" collapsed="true" toggleSpeed="100" rendered="#{linhaAction.grafico.temFiltro}"> <!-- <c:forEach items="#{linhaAction.grafico.mapFiltroKey}" var="filtroKey"> --> <p:selectCheckboxMenu value="#{linhaAction.filtro}" valueChangeListener="#{linhaAction.meuvalueChangeListener}" label="uf" filter="true" filterText="Filter" filterMatchMode="startsWith" panelStyle="width:210px;heigth:70px; margin-left :70px; font-size:12px"> <f:selectItems value="#{linhaAction.grafico.mapFiltro['uf']}" /> </p:selectCheckboxMenu> <!-- </c:forEach> --> <p:commandButton id="filtrarGrafTabel" icon="ui-icon-search" title="Filtrar" action="#{linhaAction.aplicaFiltro}" update="linear, graficoTabela" /> </p:fieldset>

Bean

public void meuValueChangeListener(ValueChangeEvent event){ System.out.println("lister"); }

mariofcc

E meu list com os selecionados fica vazio.

public List<String> getFiltro() {
		return filtro;
	}

	public void setFiltro(List<String> filtro) {
		this.filtro = filtro;
	}
J

robsonperassoli, estou tendo o mesmo problema, você conseguiu resolver esse caso?

mariofcc

Cara o problema foi contornado de outra forma, não consegui resolve.

J

como você fez?

mariofcc

cara usei outro componente, agora não lembro mais.
Esse projeto foi congelado.

Criado 21 de maio de 2012
Ultima resposta 22 de mar. de 2013
Respostas 12
Participantes 6