Я смотрел на другие темы, связанные с этой ошибкой, и не могу понять, почему я все еще сталкиваюсь с этой проблемой. Я считаю, что проблема связана с моим HTML-шаблоном. Я пытаюсь создать простой выпадающий список, чтобы выбрать список «тренировок» для удаления.
HTML-форма:
<form action="#" th:action="@{/workout/deleteWorkout}" th:object="${workout}" method="post">
<select th:field="*{workout}" name="workout" class="selectForm">
<option th:each="workout : ${workouts}"
th:value="${workout.workoutID}"
th:text="${workout.workoutName}">
</option>
</select>
<input type="submit" class="input-box">
</form>
Методы контроллера для страницы:
@GetMapping("/workout/deleteWorkout")
public String deleteWorkoutForm(Model model,
HttpServletRequest request) {
Account account = (Account) request.getSession().getAttribute("loggedInUser");
model.addAttribute("workouts", workoutService.getWorkouts(account));
return "deleteWorkout";
}
@PostMapping("/workout/deleteWorkout")
public String deleteWorkout(@ModelAttribute Workout workout){
workoutService.deleteWorkout(workout);
return "workoutDeleted";
}
Ошибка:
org.springframework.beans.NotReadablePropertyException: Invalid property 'workout' of bean class [depaul.tables.Workout]: Bean property 'workout' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
Любая помощь приветствуется. Я особенно запутался, потому что в другом методе у меня не было проблем с получением выпадающего списка для выбора функции тренировки. Спасибо!
редактировать:
Тренировка:
@Entity
public class Workout implements Serializable, IWorkout {
public Workout(){
}
public Workout(String accountName, String workoutName, String description, String workoutDate){
this.accountName = accountName;
this.workoutName = workoutName;
this.description = description;
this.workoutDate = workoutDate;
}
private String accountName;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long workoutID;
@NotNull
private String workoutName;
private String description;
private String workoutDate;
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.EAGER,
mappedBy = "workout")
@Nullable
private Collection<Exercise> exercises = new ArrayList<Exercise>();
public String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
this.accountName = accountName;
}
@Override
public Long getWorkoutID() {
return workoutID;
}
@Override
public void setWorkoutID(Long workoutID) {
this.workoutID = workoutID;
}
@Override
public String getWorkoutName() {
return this.workoutName;
}
@Override
public void setWorkoutName(String workoutName) {
this.workoutName = workoutName;
}
@Override
public String getDescription() {
return description;
}
@Override
public void setDescription(String description) {
this.description = description;
}
@Override
public String getWorkoutDate() {
return this.workoutDate;
}
@Override
public void setWorkoutDate(String workoutDate) {
this.workoutDate = workoutDate;
}
@Override
public Collection<Exercise> getExercises() {
return exercises;
}
@Override
public void setExercises(Collection<Exercise> exercises) {
this.exercises = exercises;
}