Llenar desplegable de una entidad utilizando Spring MVC y thymeleaf

Bram:

Estoy trabajando en una aplicación en la que quiero añadir un estudiante a una comida con un menú desplegable en un formulario. Mi código es el siguiente:

Meal.java

@Entity
public class Meal {

@Id
@GeneratedValue
  private Long id;

  @OneToOne
  private Student mealCook;

  private String mealName;

  private int mealPrice;

Student.java

@Entity
 public class Student {

@Id
@GeneratedValue
private Long id;

private String studentName;

MealController.java

@Controller
@RequestMapping("/m")
public class MealController {

private final MealRepository mealRepository;
private final StudentRepository studentRepository;

public MealController(MealRepository mealRepository, StudentRepository studentRepository){
    this.mealRepository = mealRepository;
    this.studentRepository = studentRepository;
}

@GetMapping
public ModelAndView list(){
    Iterable<Meal> meals = this.mealRepository.findAll();
    return new ModelAndView("meals/list" , "meals", meals);
}

@GetMapping("{id}")
public ModelAndView view(@PathVariable("id") Meal meal) {
    return new ModelAndView("meals/view", "meal", meal);
}

@GetMapping(params = "form")
public String createForm(@ModelAttribute Meal meal) {
    return "meals/form";
}

@PostMapping
public ModelAndView create(@Valid Meal meal,  BindingResult result,
                           RedirectAttributes redirect) {
    Iterable<Student> students = this.studentRepository.findAll();
    if (result.hasErrors()) {
        return new ModelAndView("meals/form", "formErrors", result.getAllErrors());
    }
    meal = this.mealRepository.save(meal);
    redirect.addFlashAttribute("globalMessage", "view.success");
    return new ModelAndView("redirect:/m/{meal.id}", "meal.id", meal.getId());
}

Y por último mi punto de vista -> form.html

<form id="mealForm" th:action="@{/m/(form)}" th:object="${meal}" action="#" method="post">

    <div class="form-group">
        <label for="mealName">Meal Name</label>
        <input type="text" th:field="*{mealName}" th:class="${'form-control' + (#fields.hasErrors('mealName') ? ' is-invalid' : '')}">
    </div>

    <div class="form-group">
        <label for="mealCook">Meal Cook</label>
        <select th:field="*{mealCook}">
            <option th:each= ??
                    th:value= ??
                    th:text= ??</option>
        </select>
    </div>

    <button type="submit" class="btn btn-primary">Submit</button>
</form>

Ahora el objetivo es añadir 1 estudiante a una comida seleccionando el StudentName de un menú desplegable en un formulario.

Pero estoy stuggling sobre cómo pasar una lista de los estudiantes desde el controlador a la vista y lo mostrará en una lista desplegable.

AmirBll:

Usted debe agregar lista de estudiantes en el controlador donde quiera abrir el formulario:

    ModelAndView model = new ModelAndView("studentList");
    model.addObject(students) // get list from database or...
    // students =studentRepository.findAll() or use your exclusive query

y <option>:

<option th:each="item : ${studentList}"
        th:value=${item.id} // value you want...
        th:text=${item.name}>
</option>

y entidades de cambio:

Meal.java :

@Entity
    public class Meal {

@Id
@GeneratedValue
  private Long id;

  @OneToOne
  @JoinColumn(name = "meel_cook_id")
  private Student mealCook;

  private String mealName;

  private int mealPrice;

Student.java :

@Entity
 public class Student {

@Id
@GeneratedValue
private Long id;

private String studentName;

@OneToOne(mappedBy = "mealCook")
@JsonBackReference
private Meal meal;

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=337243&siteId=1
Recomendado
Clasificación