Popular lista no ManagedBean através de checkbox clicados pelo usuário

PostgreSQL

Java

Modelagem

Front-end

05/10/2016

Olá pessoal, preciso implementar uma nova funcionalidade para o sistema da empresa e na hora de pensar na lógica, travei!!!

Se puderem me ajudar, agradeceria muito.

O problema é o seguinte, tenho duas Classes (e entidades do banco), são elas: Praga e Inspecao.

Na classe Inspecao tenho um atributo (que não sei se vai funcionar direito, devido ao mapeamento que eu fiz) que é do tipo
List<Praga>
. Em outras palavras a classe Inspecao recebe uma lista de pragas encontradas no momento da inspeção.

Pensei em uma lógica mais ou menos assim: Vou criar uma tela com todas as Pragas existentes no sistema (não são muitas) acompanhadas de um checkbox para cada, além do checkbox referente a praga, tenho alguns
<p:inputText>
para inserir algumas informações como qntde, etc. Quando o usuário marca o checkbox de determinada praga, eu teria q adiciona-la na lista de pragas no meu managedBean para quando for persistir passar essa lista ao atributo da classe Inspeção.

Não sei ficou claro, mas em resumo é uma tela com uma lista acompanha de checkbox, que quando clicadados adicionam aquele item a lista do managedBean. Segue alguns códigos q tentei fazer, mas não sai muito do lugar.


Obrigado

Tela com a Praga1 (Leprose) listada, ao clicar no checkbox rotulado com "Leprose", deveria adicionar o objeto Leprose à lista de Pragas, o mesmo código se repetiria para as demais pragas:

<p:row>
                        <p:column colspan="8">
                            <p:selectBooleanCheckbox id="boolCheckLeprose" required="#{param['fmCadIspecao:btnConfirm']==false}"
                                                     value="Leprose" >
                                <f:ajax render="novas"/>
                            </p:selectBooleanCheckbox>
                            <p:spacer width="6"/>
                            <p:outputLabel value="Leprose" for="boolCheckLeprose" />

                            <br/>

                            <p:selectBooleanCheckbox id="novas" required="#{param['fmCadIspecao:btnConfirm']==false}" 
                                                     value="#{inspecaoController.inspecao.plantasNovas}" />
                            <p:spacer width="6"/>
                            <p:outputLabel value="Plantas Novas >>" for="novas"/>
                            <p:spacer width="10"/>
                            <p:outputLabel id="qtdElevadoNova" value="Qtde. + elevado: " for="qtdMaisElevadoNova"/>
                            <p:inputText id="qtdMaisElevadoNova" value="#{inspecaoController.inspecao.qntdMaisElevadaNovas}" style="width: 60px;"/>
                            <p:spacer width="5"/>
                            <p:outputLabel id="qtdTotalNova" value="Qtde. Total: " for="qtdTotalNovas"/>
                            <p:inputText id="qtdTotalNovas" value="#{inspecaoController.inspecao.qntdTotalNovas}" style="width: 60px;"/>

                            <br/>

                            <p:selectBooleanCheckbox id="velhas" required="#{param['fmCadIspecao:btnConfirm']==false}" 
                                                     value="#{inspecaoController.inspecao.plantasVelhas}" />
                            <p:spacer width="6"/>
                            <p:outputLabel value="Plantas Velhas >>" for="velhas"/>
                            <p:spacer width="8"/>
                            <p:outputLabel id="qtdElevadoVelhas" value="Qtde. + elevado: " for="qtdMaisElevadoVelhas"/>
                            <p:inputText id="qtdMaisElevadoVelhas" value="#{inspecaoController.inspecao.qntdMaisElevadaVelhas}" style="width: 60px;"/>
                            <p:spacer width="5"/>
                            <p:outputLabel id="qtdTotal" value="Qtde. Total: " for="qtdTotalVelhas"/>
                            <p:inputText id="qtdTotalVelhas" value="#{inspecaoController.inspecao.qntdTotalVelhas}" style="width: 60px;"/>


Classe Praga:

@Entity
@SequenceGenerator(name = "PRAGA_SEQUENCE", sequenceName = "PRAGA_SEQUENCE",
        allocationSize = 1, initialValue = 0)
@Table(name = "praga")
public class Praga implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRAGA_SEQUENCE")
    private Long id;

    @Column(name = "nome", nullable = false)
    private String nome;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "intervalo_baixo")
    private Intervalo intervaloBaixo;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "intervalo_medio")
    private Intervalo intervaloMedio;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "intervalo_alto")
    private Intervalo intervaloAlto;

    @ManyToOne
    private Inspecao inspecao;

     //gets e setters omitidos


Classe Inspecao:

@Entity
@SequenceGenerator(name = "INSPECAO_SEQUENCE", sequenceName = "INSPECAO_SEQUENCE",
        allocationSize = 1, initialValue = 0)
@Table(name = "inspecao")
public class Inspecao implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "INSPECAO_SEQUENCE")
    private Long id;

    @Column(name = "numero_inspecao")
    private Long numInspecao;

    @ManyToOne
    @JoinColumn(name = "talhao_inspecionado", nullable = false)
    private Talhao talhaoInspecionado;

    @Column(name = "porcentagem_a_visar", nullable = false)
    private double porcentagemAvisar;

    @Column(name = "data_inspecao", nullable = false)
    @Type(type = "com.delago.matta.type.LocalDateUserType")
    private LocalDate dataInspecao;

    @ManyToOne
    @JoinColumn(name = "inspetor", nullable = false)
    private Funcionario inspetorResponsavel;

    @OneToMany(mappedBy = "inspecao")
    @OrderBy("id")
    private List<Praga> pragaEncontradas; // essa é a lista na classe

    @Column(name = "planta_novas_infectadas")
    private boolean plantasNovas;

    @Column(name = "qntdMaisElevado_plantasNovas")
    private Integer qntdMaisElevadaNovas;

    @Column(name = "qntdTotal_plantasNovas")
    private Integer qntdTotalNovas;

    @Column(name = "plantas_velhas_infectadas")
    private boolean plantasVelhas;

    @Column(name = "qntdMaisElevado_plantasVelhas")
    private Integer qntdMaisElevadaVelhas;

    @Column(name = "qntdTotal_plantasVelhas")
    private Integer qntdTotalVelhas;



ManagedBean:

@ManagedBean
@SessionScoped
public class InspecaoController implements Serializable {

    private final iFunctions apiMatta;
    private Inspecao inspecao;
    private final InspecaoDAO dao;

    private Propriedade propriedade = new Propriedade();
    private Talhao talhao = new Talhao();
    private Funcionario inspetor = new Funcionario();
    private Praga praga = new Praga();

    private List<Propriedade> listaPropriedades;
    private List<Talhao> listaTalhoes;
    private List<Funcionario> listaFuncionarios;
    private List<Praga> listaPragas; // essa lista deveria receber as pragas que foram checkadas na tela
    private List<Inspecao> listaInspecoes;
    private final List<EstagioPraga> estagiosExistentes;
    private List<String> estagiosEncontrados;

     public String salvar() {
        try {
            inspecao.setInspetorResponsavel(inspetor);
            inspecao.setPragaEncontradas(listaPragas);
            inspecao.setTalhaoInspecionado(talhao);
            inspecao.setUsuario(usuario);
            defineNumeroInspecao(talhao);
            if (dao.inserir(inspecao)) {
                listaInspecoes = listar();
                limparCampos();
                ApiMatta.addMessageSuccessful("Sucesso", "Inspeção salva com sucesso!");
                return "/pages/inspecao/index.xhtml?faces-redirect=true";
            } else {
                ApiMatta.addMessageError(null, "Erro", "Erro ao cadastrar nova Inspeção.");
                return "";
            }
        } catch (Exception e) {
            System.out.println("Inspecao.salvar-catch:" + e.getMessage());
            e.printStackTrace();
            return "";
        }
    }



como podem ver não conseguir desenvolver algo para fazer a adição na lista.



Obrigado.
Rafael

Rafael

Curtidas 0
POSTAR