1

I have the following classes:

@Entity
public class Aluno {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ra")
    private int ra;

    @NotNull(message = "Nome não pode ser nulo!")
    @NotEmpty(message = "Nome não pode ser vazio!")
    @Column(name = "nome")
    private String nome;

    public int getRa() {
        return ra;
    }

    public void setRa(int ra) {
        this.ra = ra;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

}

@Entity
public class Disciplina {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "codigo")
    private int codigo;

    @NotNull(message = "Nome não pode ser nulo!")
    @NotEmpty(message = "Nome não pode ser vazio!")
    @Column(name = "nome")
    private String nome;

    @NotNull(message = "Sigla não pode ser nula!")
    @NotEmpty(message = "Sigla não pode ser vazia!")
    @Column(name = "sigla")
    private String sigla;

    @NotNull(message = "Turno não pode ser nulo!")
    @NotEmpty(message = "Turno não pode ser vazio!")
    @Column(name = "turno")
    private String turno;

    @NotNull(message = "Número não pode ser nulo!")
    @Column(name = "num_aulas")
    private int numeroAulas;

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSigla() {
        return sigla;
    }

    public void setSigla(String sigla) {
        this.sigla = sigla;
    }

    public String getTurno() {
        return turno;
    }

    public void setTurno(String turno) {
        this.turno = turno;
    }

    public int getNumeroAulas() {
        return numeroAulas;
    }

    public void setNumeroAulas(int numeroAulas) {
        this.numeroAulas = numeroAulas;
    }

}

@Entity
public class Faltas {

    @EmbeddedId
    private FaltasPK pk;

    @ManyToOne
    @MapsId("ra")
    @JoinColumn
    private Aluno aluno;

    @ManyToOne
    @MapsId("codigo")
    @JoinColumn
    private Disciplina disciplina;

    @NotNull(message = "Presença não pode ser nula!")
    @NotEmpty(message = "Presença não pode ser vazia!")
    @Column(name = "presenca")
    private String presenca;

    public FaltasPK getPk() {
        return pk;
    }

    public void setPk(FaltasPK pk) {
        this.pk = pk;
    }

    public Aluno getAluno() {
        return aluno;
    }

    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
    }

    public Disciplina getDisciplina() {
        return disciplina;
    }

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

    public String getPresenca() {
        return presenca;
    }

    public void setPresenca(String presenca) {
        this.presenca = presenca;
    }

}

How can I create a combobox in HTML with Thymeleaf which loads all the data of "Aluno" and "Disciplina" in my page (so that I can choose an "Aluno" and a "Disciplina" to create "Faltas"?

This is my controller:

@RequestMapping(method = RequestMethod.GET, value = "/faltas")
    public ModelAndView inicio() {

        ModelAndView modelAndView = new ModelAndView("insercao/faltas");
        modelAndView.addObject("faltaobj", new Faltas());
        List<Faltas> listaFaltas = faltasRepository.findAll();
        modelAndView.addObject("listaFaltas", listaFaltas);
        return modelAndView;

    }

And I tried to do my HTML with Thymeleaf with the following code:

<div class="row">
                    <label for="aluno" class="active">Aluno</label> 
                        <select th:field="*{aluno}">
                           <option value="">Selecione um aluno</option>
                           <option th:each="aluno : ${listaAlunos}" th:value="${aluno.ra}" th:text="${aluno.nome}" />
                        </select>
            </div>
            <div class="row">
                    <label for="disciplina" class="active">Disciplina</label> 
                        <select th:field="*{disciplina}">
                            <option value="">Selecione uma disciplina</option>
                            <option th:each="disciplina : ${listaDisciplinas}" th:value="${disciplina.codigo}" th:text="${disciplina.nome}" />
                        </select>
            </div>

            <div class="row">
                    <label for="data" class="active">Data</label> 
                    <input name="data" class="validate" th:field="*{pk.data}" id="data">
            </div>


            <div class="row">
                    <label for="presenca" class="active">Presença</label> 
                    <input name="presenca" class="validate" th:field="*{presenca}" id="presenca">
            </div>

The text inputs are showing up, but these two comboboxes aren't - since "Aluno" and "Disciplina" are not simple attributes of "Faltas", unlike "data" and "presenca" attributes, for example.

LP0956
  • 21
  • 1
  • 5
  • Hope this helps https://stackoverflow.com/questions/37715276/how-do-i-populate-a-drop-down-with-a-list-using-thymeleaf-and-spring – ASP Nov 15 '19 at 05:32
  • Try setting the listaAlunos and listaDisciplinas as seperate objects in the controller. For example, for listaDisciplinas add: modelAndView.addObject("listaDisciplinas", listaDisciplinas) and do the same for listaAlunos. – Hayes Roach Nov 15 '19 at 05:48

0 Answers0