Я хочу создать веб-сайт, отображающий форму. Поля формы зависят от параметра запроса (а также компонента бэк-формы). Это мой контроллер, который предоставляет различные формы:Как разместить общие объекты в контроллере Spring?
@Controller
public class TestController {
@Autowired
private MyBeanRegistry registry;
@RequestMapping("/add/{name}")
public String showForm(@PathVariable String name, Model model) {
model.addAttribute("name", name);
model.addAttribute("bean", registry.lookup(name));
return "add";
}
}
Соответствующий вид выглядит следующим образом:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<form method="post" th:action="@{|/add/${name}|}" th:object="${bean}">
<th:block th:replace="|${name}::fields|"></th:block>
<button type="submit">Submit</button>
</form>
</body>
</html>
Ниже приведен пример фрагмента, который отображает поля формы:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<th:block th:fragment="fields">
<label for="firstName">First name</label><br />
<input type="text" id="firstName" th:field="*{firstName}" /><br />
<label for="lastName">Last name</label><br />
<input type="text" id="lastName" th:field="*{lastName}" />
</th:block>
</body>
</html>
Взглянув вверх по бобам будет выглядеть так:
public class MyExampleBean {
private String firstName;
private String lastName;
// Getters & setters
}
Форма отображается правильно, но как я могу получить форму обратно в контроллер? И как я могу проверить поданный компонент? Я попробовал следующий метод, но, очевидно он не может работать:
@RequestMapping(value = "/add/{name}", method = RequestMethod.POST)
public String processForm(@PathVariable String name, @Valid Object bean) {
System.out.println(bean);
return "redirect:/add/" + name;
}
Spring создает новый экземпляр Object
но представленные значения теряются. Итак, как я могу выполнить эту задачу?
Похоже, проблема области видимости, есть параметр, чтобы сказать вы хотите объем сеанса для этой формы? –
Я не задал рамки для формы. – stevecross