У меня проблемы с отправкой данных в одну из моих таблиц. Ниже вы можете увидеть мои методы: один показывает шаблон с формой, а второй добавляет это действие.
@GetMapping("/addaction/{id}")
public String addAction(Model model, @PathVariable("id") int id ) {
Optional<PlantEntity> plantEntity = plantService.getPlantById(id);
if (plantEntity.isPresent()) {
model.addAttribute("plant", plantEntity.get());
}
return "addaction";
}
@PostMapping("/addaction/{id}")
public String addAction(@ModelAttribute ActionForm actionForm,
@PathVariable("id") int plantId) {
if (!userService.isLogin()) {
return "redirect:/";
}
actionService.addAction(actionForm, plantId);
return "redirect:/plant/"+plantId;
}
Вот мой метод в Сервисе:
public void addAction (ActionForm actionForm, int plantId) {
PlantEntity plantEntity = new PlantEntity();
plantEntity.setId(plantId);
ActionEntity act = new ActionEntity();
act.setName(actionForm.getName());
act.setDescription(actionForm.getDescription());
act.setPlant(plantEntity);
act.setUser(userService.getUserData());
act.setMonth(actionForm.getMonth());
actionRepository.save(act);
}
и мой шаблон: addaction.html
<form method = "post" action = "'/addaction/'+${plant.getId()}"
th:object = "${actionForm}">
<div class = "form-group">
<label for = "exampleInputEmail1">Name of activity</label> <input
type = "text" th:field = "*{name}" class = "form-control"
id = "exampleFormControlInput1" aria-describedby = "emailHelp"
placeholder = "Name your work">
</div>
<div class = "form-group">
<label for = "exampleFormControlTextarea1">What you gonna
do?</label>
<textarea class = "form-control" th:field = "*{description}"
id = "exampleFormControlTextarea1" rows = "4"></textarea>
</div>
<div class = "input-group mb-3">
<div class = "input-group-prepend">
<label class = "input-group-text" for = "inputGroupSelect01">Month of activity</label>
</div>
<select class = "custom-select" th:field = "*{month}"
id = "inputGroupSelect01">
<option value = "1">January</option>
<option value = "2">February</option>
<option value = "3">March</option>
<option value = "4">April</option>
<option value = "5">May</option>
<option value = "6">June</option>
<option value = "7">July</option>
<option value = "8">August</option>
<option value = "9">September</option>
<option value = "10">October</option>
<option value = "11">November</option>
<option value = "12">December</option>
</select>
</div>
<button type = "submit" class = "btn btn-dark">Action!</button>
</form>
Основная проблема: когда я пытаюсь добавить действие, результат:
http://localhost:8080/addaction/'/addaction/'+$%7Bplant.getId()%7D
Есть какая-то петля. Что я делаю неправильно? Спасибо за уделенное время!




Вам не нужно проходить '. Spring язык выражений также без '.
Попробуйте удалить, как показано ниже.
action = "/addaction/${plant.getId()}"
Обратитесь к тимелеаф-конструкция-URL-адрес с переменной
Спасибо! Этот случай был немного сложнее, но ваша ссылка оказалась очень полезной :) Она работает с: th: action = "@ {/ addaction / {id} (id = $ {plant.getId ()})}"
Попробуйте
"/addaction/${plant.getId()}"