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;