Spring MVC Невозможно передать данные формы, используя выпадающий список Thymeleaf - PullRequest
0 голосов
/ 27 апреля 2018

Я играю с Thymeleaf и создал выпадающее меню с именами людей. Мой класс контроллера представляет одного пользователя, у которого также есть одноуровневое имя с пользователем. При создании формы в Thymeleaf th:field="*{sibling}" вызывает мою проблему, и я не могу ее решить. Я посмотрел на SO ссылки, такие как эта , однако это не помогло мне решить мою проблему. Непосредственно ниже трассировка стека ошибки:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.thymeleaf.spring4.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:401) ~[thymeleaf-spring4-2.1.5.RELEASE.jar:2.1.5.RELEASE]
at org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:328) ~[thymeleaf-spring4-2.1.5.RELEASE.jar:2.1.5.RELEASE]
at org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:294) ~[thymeleaf-spring4-2.1.5.RELEASE.jar:2.1.5.RELEASE]
at 
    ........

Это код, который я создал до сих пор, но в настоящее время он не работает. В SO сообщении, за которым я следовал, предлагалось включить BindingResult, но даже при этом все равно не повезло. Я чувствую, что упускаю что-то несколько очевидное, но не могу придумать решение!

EDIT : Следуя совету bphilipnyc , я добавил объект пользователя в модель в моем контроллере, что позволяет отображать раскрывающийся список. Однако раскрывающийся список не заполняется вообще.

@Document(collection = "users")
public class User {

    @Id
    private String id;

    private String userName;
    private String sibling;
   //getters and setters below
}

Мой контроллер выглядит так:

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    Set<String> allSiblings = new HashSet<>();

    @ModelAttribute("user")
    public Recipe defaultInstance() {
        User user = new User();
        return user;
    }

    @GetMapping("/")
    public String index(Model model){
        List<User> allUsers = userService.findAll();
        createDropDown();

        model.addAttribute("users", allUsers);
        model.addAttribute("allSiblings", this.allSiblings);
        return "index";
}

@GetMapping("/search")
public String search(@Valid @ModelAttribute("user") User user, BindingResult bindingResult){
    if(bindingResult.hasErrors()){
        System.out.println("There was a error "+bindingResult);
        return "index";
    }

    System.out.println(user.getSibling());
    return "result";
}

private void createDropDown(){
    allSiblings.add("john");
    allSiblings.add("paul");
}

И, наконец, у меня есть страница index.html со следующей выпадающей формой из тимьяна:

<form style="display:inline-block" th:action="@{/search}" th:object="${user}">
<select th:field="*{sibling}">
    <option value=""> --</option>
    <option th:each="ing : ${allSiblings}"
            th:value="${ing}"
            th:utext="${ing}">

    </option>
</select>
<button type="submit">submit</button>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...