Search code examples
springspring-bootspring-dataspring-data-jpathymeleaf

Spring Boot error while submitting form


I'm trying to add a table to the database via a form. The entity being created is called Album and it has 2 fields, Artist and Genre. Each of these two are separate entities. These 2 fields are annotated with @ManyToOne

@ManyToOne
private Artist artist;

@ManyToOne
private Genre genre;

When I submit the form, this is the error im getting:

There was an unexpected error (type=Internal Server Error, status=500).
Error during execution of processor 'org.thymeleaf.spring4.processor.attr.SpringOptionFieldAttrProcessor' (album/add:52)

The following code is part of my controller:

    @RequestMapping({"/add", "/add/"})
public String adminAlbumAdd(Model model) {
    model.addAttribute("album", new Album());
    model.addAttribute("artists", artistService.list());
    model.addAttribute("genres", genreService.list());
    return "album/add";
}

@RequestMapping( value = "/save", method = RequestMethod.POST )
public String save(@Valid Album album, BindingResult bindingResult, Model model) {
    if(bindingResult.hasErrors()) {
        model.addAttribute("artists", artistService.list());
        model.addAttribute("genres", genreService.list());
        return "album/add";
    } else {
    Album savedAlbum = albumService.save(album);
    return "redirect:/album/view/" + savedAlbum.getAlbumId();
    }
}

And the following code is part of the thymeleaf template:

    <div th:class="form-group" th:classappend="${#fields.hasErrors('artist')}? 'has-error'">
            <label class="col-sm-2 control-label">Artist <span class="required">*</span></label>
            <div class="col-md-10">
                <select class="form-control" th:field="*{artist}">
                    <option value="">Select Artist</option>
                    <option th:each="artist : ${artists}" th:value="${artist.artistId}" th:text="${artist.artistFirstName + ' ' + artist.artistFirstName}">Artists</option>
                </select>
                <span th:if="${#fields.hasErrors('artist')}" th:errors="*{artist}" th:class="help-block">Artist Errors</span>
            </div>
        </div>   

        <div th:class="form-group" th:classappend="${#fields.hasErrors('genre')}? 'has-error'">
            <label class="col-sm-2 control-label">Genre <span class="required">*</span></label>
            <div class="col-md-10">
                <select class="form-control" th:field="*{genre}">
                    <option value="">Select Genre</option>
                    <option th:each="genre : ${genres}" th:value="${genre.genreName}" th:text="${genre.genreName}">Genres</option>
                </select>
                <span th:if="${#fields.hasErrors('genre')}" th:errors="*{genre}" th:class="help-block">Genre Errors</span>
            </div>
        </div>    

What is causing this error ?


Solution

  • The issue turned out to be related to the repository. I was extending CrudRepository, but the id was of type int. Once i changed that, it worked.