Popular lista no ManagedBean através de checkbox clicados pelo usuário
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. 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 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:
Classe Praga:
Classe Inspecao:
ManagedBean:
como podem ver não conseguir desenvolver algo para fazer a adição na lista.
Obrigado.
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>
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>
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 omitidosClasse 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
Curtidas 0