Boa noite.
Estou em dúvida em como usar o List<>.
É o seguinte:
Quando a mãe vai fazer seu cadastro ele deverá cadastrar os filhos. Para cadastrar esses filhos pensei em usar o List<>, pois a quantidade de filhos é dinâmica e quando ela terminar o cadastro irei persistir essa list e o cadastro dela.
Estou usando primefaces + hibernate.
Tenho as seguintes classes:
@Entity
@SequenceGenerator(name = "maeSequence", sequenceName = "maeSequence")
public class Mae implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name="id_mae")
@GeneratedValue(strategy=GenerationType.AUTO, generator="maeSequence")
private int idMae;
private String nome;
private String cpf;
private String telefone;
private String celular;
private String email;
private Integer quantidade;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "mae")
@JoinColumn(name = "id_filhos")
private List<Filhos> filhos;
//gets e sets omitidos
}
@Entity
@SequenceGenerator(name = "filhosSequence", sequenceName = "filhosSequence")
public class Filhos implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="id_filhos")
@GeneratedValue(strategy=GenerationType.AUTO, generator="filhosSequence")
private int idFilhos;
private String nome;
private String dtNascimento;
@ManyToOne (targetEntity=br.com.matricula.modelo.Mae.class)
@JoinColumn(name="idMae", nullable=false)
private Mae mae;
//gets e sets omitidos
}
@ManagedBean(name = "maeControle")
@ViewScoped
public class MaeControle implements Serializable {
private static final long serialVersionUID = 1L;
private Mae mae;// = new Aluno();
@javax.annotation.PostConstruct
public void inicializarObjetos() {
this.mae = new Mae();
}
public Mae getMae() {
return mae;
}
public void setMae(Mae mae) {
this.mae = mae;
}
}
package br.com.matricula.controle;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import br.com.matricula.modelo.Filhos;
@ManagedBean(name = "filhosControle")
@ViewScoped
public class FilhosControle implements Serializable {
private static final long serialVersionUID = 1L;
private Filhos filhos;// = new Aluno();
@javax.annotation.PostConstruct
public void inicializarObjetos() {
this.filhos = new Filhos();
}
public Filhos getFilhos() {
return filhos;
}
public void setFilhos(Filhos filhos) {
this.filhos = filhos;
}
}
Bem o problema é o seguinte:
Quando eu adiciono o filho a mãe, aparentemente está tudo certo, o DataTable é atualizado e é inserido uma linha no mesmo, mas a linha que é inserida fica em branco, ou seja, eu consigo inserir filhos à mãe mas não consigo mostrar esses filhos no DataTable.
public void adcionarAlunoMae(){
filho.add(filhosControle.getFilhos());
}
public DataModel<Filhos> getListarFilhos() {
listarFilhos = new ListDataModel<Filhos>(filho);
return listarFilhos;
}
o DataTable que é atualizado e adiciona uma tupla, porém a tupla está vazia.
<h:form id="formListaFilhos">
<p:dataTable id="tabelaFilhos" var="filhos"
value="#{maeSalvarControle.listarFilhos}" paginator="true" rows="10"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="10,15" width="100" selection="single"
height="500" emptyMessage="Nenhum usuário cadastrado!">
<p:column headerText="Aluno" style="width:75%;">
<h:outputText value="#{filhos.nome}"/>
</p:column>
<p:column headerText="Turma" style="width:25%;">
<h:outputText value="#{filho.dtNascixvsmento}"/>
</p:column>
</p:dataTable>
</h:form>