0
私はSpring/Thymeleafを学んでおり、私は小さなプロジェクトを構築しています。 ここに私のコードの一部です:これは私の編集者であるInitBinderはサブミット時に呼び出しません
@Controller
public class MovieController {
private IMovieService movieService;
private IGenreService genreService;
@Autowired
public MovieController(IMovieService movieService, IGenreService genreService) {
this.movieService = movieService;
this.genreService = genreService;
}
@InitBinder(value = "genres")
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Genre.class, new GenrePropertyEditor());
}
@RequestMapping(value = "/addNewMovie", method = RequestMethod.GET)
public String addMovieForm(Model model) {
model.addAttribute("movie", new Movie());
model.addAttribute("genreList", genreService.findAll());
return "movie-add/view";
}
@RequestMapping(value = "/addNewMovie", method = RequestMethod.POST)
public String addMovie(@ModelAttribute Movie movie, Model model) {
movieService.save(movie);
return "redirect:allMovies";
}
}
: これは私のコントローラである
public class GenrePropertyEditor extends PropertyEditorSupport {
@Autowired
private GenreService genreService;
@Override
public void setAsText(String id) {
final Genre part = genreService.findById(UUID.fromString(id));
setValue(part);
}
@Override
public String getAsText() {
return ((Genre) getValue()).getId().toString();
}
}
そして、これが私の見解です:私は呼ん
<form action="#" th:action="@{/addNewMovie}" th:object="${movie}"
method="post">
<p>
Title : <input type="text" th:field="*{title}" />
</p>
<p>
Description : <input type="text" th:field="*{description}" />
</p>
<p>
Year : <input type="text" th:field="*{year}" />
</p>
<select class="form-control" th:field="*{genres}" multiple="multiple">
<option th:each="genre : ${genreList}"
th:field="*{genres}"
th:value="${genre.id}"
th:text="${genre.genreInformation}">
Action
</option>
</select>
<p>
<input type="submit" value="Submit" /> <input type="reset"
value="Reset" />
</p>
</form>
addMovieメソッドを使用して新しいムービーを作成します。タイトル、説明、年を指定しますが、ジャンルはありません。私はそれをデバッグし、発見する: 1私は2つのジャンルで提出する。 2つのヌルのリストを作成します。 2 Initバインダーメソッドが呼び出されませんでした。
「ジャンル」はリストまたは配列ですか?あなたのinitバインダー(Genre.classにマッチしようとしている)は、そのような配列にマッチするとは思わない。配列のバインドに関する例を見つける必要があると思います。 – Metroids