GARANTIR DESCONTO

Fórum Problema com selectManyCheckBox do JSF #499923

02/11/2014

0

Olá pessoal,gostaria de uma ajuda com o , eu tenho um que possue uma lista de cursos, dai quando o usuario escolhe um curso, ele renderiza a lista do que é responsavel por mostrar todas as disciplinas que aquele curso tem, dai o usuario escolhe as disciplinas para que seja listada no dataTable as questões relacionadas as disciplinas selecionadas.

Segue minha pagina jsf:
<h:form class="form-inline">
    <div>
        <div class="form-group">
            <h4>Curso:</h4>
            <h:selectOneMenu class="form-control" value="#{controleSimuladoBean.curso}" style="width: 225px;" converter="entityConverter">


                <f:selectItems var="cursos" value="#{controleCursoBean.cursos}" itemValue="#" itemLabel="#{cursos.descricao}">
                </f:selectItems>
                <f:ajax event="change" render="listaDeDisciplina" listener="#{controleDisciplinaBean.listarDisciplinasDoCurso(controleSimuladoBean.curso)}" />

            </h:selectOneMenu> 
        </div>

        <div class="form-group">
            <h4>Disciplina:</h4>
            <h:selectManyCheckbox class="form-control" id="listaDeDisciplina" value="#{controleSimuladoBean.disciplinasChecked}" layout="lineDirection" converter="entityConverter">

                <f:selectItems var="disciplina" value="#{controleDisciplinaBean.disciplinasCursoEscolhido}" itemValue="#" itemLabel="#{disciplina.nome}">
                </f:selectItems>

            </h:selectManyCheckbox> 
        </div>

        <div class="form-group" style="margin: 10px;">
            <h4>Nível:</h4>
            <h:selectOneMenu class="form-control" id="nivelQuestao" value="#{controleSimuladoBean.nivel.valor}">
                <f:selectItem itemValue="#" itemLabel="Selecione" />
                <f:selectItem itemValue="1" itemLabel="Fácil" />
                <f:selectItem itemValue="2" itemLabel="Média" />
                <f:selectItem itemValue="3" itemLabel="Difícil" />
            </h:selectOneMenu>
        </div>

        <div class="form-group" style="margin: 5px;">
            <h4>Quantidade:</h4>
            <h:inputText id="qtdQuestoes" class="form-control" p:placeholder="" style="width: 104px;" value="#{controleSimuladoBean.quantidade}" />  
        </div>

        <div class="form-group" style="margin: 5px;">
            <h4>Tipo da listagem:</h4>
            <h:selectOneMenu class="form-control" id="tipoListagem" value="#{controleSimuladoBean.modoListagem}" style="width: 150px;">
                <f:selectItem itemValue="#" itemLabel="Selecione" />
                <f:selectItem itemValue="normal" itemLabel="Normal" />
                <f:selectItem itemValue="aleatorio" itemLabel="Aleatório" />
            </h:selectOneMenu>
             
            <h:commandButton type="submit" class="btn btn-success" id="btnGerar" value="Gerar" actionListener="#{controleSimuladoBean.setarListagem(
                                                                                   controleSimuladoBean.modoListagem,
                                                                                   controleSimuladoBean.nivel.valor,
                                                                                   controleSimuladoBean.quantidade)}">
            </h:commandButton>
        </div>
    </div>
</h:form>


Meu MB - SimuladoBean

package controle;

import facade.FacadeQuestao;
import facade.FacadeSimulado;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import util.HttpUtil;
import entities.Curso;
import entities.Disciplina;
import entities.enums.Nivel;
import entities.Questao;
import entities.Simulado;
import entities.Usuario;
import entities.enums.Status;

@ManagedBean(name = "controleSimuladoBean")
@ViewScoped
public class ControleSimuladoBean implements Serializable {

    private FacadeSimulado facadeSimulado;
    private FacadeQuestao facadeQuestao;

    private Simulado simulado;
    private Simulado simuladoSelecionado;
    private Curso curso;
    private Disciplina disciplina;
    private List <Disciplina> disciplinasChecked = new ArrayList();
    private Nivel nivel;
    private Status status;

    private List <Questao> questoes = new ArrayList();
    private List <Simulado> simuladosCursoEscolhido;

    private Map <Long, Boolean> checked = new HashMap();
    private Long idUrlParametro;
    private int quantidade;
    private String modoListagem;

    @PostConstruct
    private void init() {
        facadeSimulado = new FacadeSimulado();
        facadeQuestao = new FacadeQuestao();

        simulado = new Simulado();
        simuladoSelecionado = new Simulado();

        disciplina = new Disciplina();
        curso = new Curso();
        nivel = new Nivel();
        status = new Status();


        simuladosCursoEscolhido = new ArrayList();
    }

    public Simulado getSimulado() {
        return simulado;
    }

    public void setSimulado(Simulado simulado) {
        this.simulado = simulado;
    }

    public Simulado getSimuladoSelecionado() {
        return simuladoSelecionado;
    }

    public void setSimuladoSelecionado(Simulado simuladoSelecionado) {
        this.simuladoSelecionado = simuladoSelecionado;
    }

    public List <Questao> getQuestoes() {
        return questoes;
    }

    public Disciplina getDisciplina() {
        return disciplina;
    }

    public void setDisciplina(Disciplina disciplina) {
        this.disciplina = disciplina;
    }

    public Curso getCurso() {
        return curso;
    }

    public void setCurso(Curso curso) {
        this.curso = curso;
    }

    public Nivel getNivel() {
        return nivel;
    }

    public void setNivel(Nivel nivel) {
        this.nivel = nivel;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public List <Simulado> getSimuladosCursoEscolhido() {
        return simuladosCursoEscolhido;
    }

    public void setSimuladosCursoEscolhido(List <Simulado> simuladosCursoEscolhido) {
        this.simuladosCursoEscolhido = simuladosCursoEscolhido;
    }

    public Map <Long,Boolean> getChecked() {
        return checked;
    }

    public void setChecked(Map <Long,Boolean> checked) {
        this.checked = checked;
    }

    public List < Disciplina > getDisciplinasChecked() {
        return disciplinasChecked;
    }

    public void setDisciplinasChecked(List <Disciplina> disciplinasChecked) {
        this.disciplinasChecked = disciplinasChecked;
    }

    public Long getIdUrlParametro() {
        return idUrlParametro;
    }

    public void setIdUrlParametro(Long idUrlParametro) {
        this.idUrlParametro = idUrlParametro;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public String getModoListagem() {
        return modoListagem;
    }

    public void setModoListagem(String modoListagem) {
        this.modoListagem = modoListagem;
    }

    public void gerarSimulado(Curso curso, Usuario usuario) {
        facadeSimulado.gerarSimulado(curso, usuario);
    }

    public void setarListagem(String modo, int nivel, int quantidade) {
       System.out.println("Modo: " + modo + " id Nivel: " + nivel + " Quantidade: " + quantidade);

        questoes = facadeQuestao.gerarQuestoes(modo, this.disciplinasChecked, nivel, quantidade);
    }


Dai por exemplo: Eu escolho o curso "sistemas de informação", ai vai aparecer as disciplinas : "Banco de dados" , "Lógica de Programação","Engenharia de Software" e "Administração de Banco de dados", com os seus devidos checkBox, digamos que eu marque os checks de "Lógica de Programação" e "Engenharia de Software" e clico no botão "Gerar" para que seja listada as questões referentes as 2 disciplinas que eu escolhi. Ok, ele renderiza o dataTable e mostra as questões!

O problema é que ao renderizar e listar as questões, ele do nada marca os checkboxs das outras disciplinas, ou seja, ele volta com os 4 checks marcados(mas eu só escolhi 2).. não sei oq está causando isso.

Alguem poderia me ajudar? Obrigado!
Thyago Henrique

Thyago Henrique

Responder

Post mais votado

05/11/2014

Pode ser que sua variável disciplinasChecked no ManagedBean esteja acumulando os valores, causando o problema. Tente fazer um clear após a finalização método chamado pelo botão gerar, assim:

public void setarListagem(String modo, int nivel, int quantidade) {
       System.out.println("Modo: " + modo + " id Nivel: " + nivel + " Quantidade: " + quantidade);
 
        questoes = facadeQuestao.gerarQuestoes(modo, this.disciplinasChecked, nivel, quantidade);
        disciplinasChecked.clear();
    }

Ronaldo Lanhellas

Ronaldo Lanhellas
Responder

Gostei + 1

Mais Posts

05/11/2014

Thyago Henrique

Era isso mesmo amigo, obrigada :D
Responder

Gostei + 0

07/11/2014

Ronaldo Lanhellas

Era isso mesmo amigo, obrigada :D


Disponha.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar