我检查了很多类似的问题,但在我的案例中没有一个问题有效。
我尝试使用弹簧形式为我的用户注册表单选择下拉列表:select tag。在我的bean中,country设置为ManyToOne,因此我传递了一个用于选择值的映射。
我之间的反弹:BindingResult和bean名称的普通目标对象都没有注册'可用作请求属性。并且:commandName not found blabla ...
帮助我了解正在发生的事情以及如何解决问题。 知道我通过MergedOutputModel(使用两个重定向来挂载视图)来装载我的视图,因此会感兴趣,因此会变量。
以下代码(简化为出现问题的位置)。
控制器类:
@Transactional
@Controller
public class RegisterController {
@Autowired
public CountryDao cDao;
@RequestMapping("register")
public String register(Model model, @ModelAttribute("user") User user, BindingResult result, HttpSession session) {
session.setAttribute("user", user);
session.setAttribute("countryList", cDao.getCountryMap());
return "login/registerForm";
}}
查看:
<body>
<h1>
<spring:message code="register.message" />
</h1>
[...]
<form:form action="addUser" commandName="register" method="post">
[...]
<spring:message code="register.country" />
<form:select path="country" items="${countryList}" />
[...]
<input type="submit" value="<spring:message code='register.submit'/>" />
</form:form>
</body>
答案 0 :(得分:0)
这可以让您更接近您的需求。您的流程可能略有不同,因此您可以根据需要调整页面名称。
@Controller
@SessionAttributes("countryList") //add whatever session attributes as needed
public class RegisterController {
@RequestMapping("/registerForm", method = RequestMethod.GET)
public String registerGet(Model model) {
model.addAttribute("user", myUserService.createUser());
model.addAttribute("countryList", countryDao.getCountryMap());
return "login/registerForm";
}
@RequestMapping("/registerVerify", method = RequestMethod.POST)
public String registerPost(@ModelAttribute("user") User user,
Errors result) {
if (result.hasErrors()) {
FormValidationLogger.log(log, result);
return "login/registerForm";
}
//persist, send emails, or do whatever
return "registerVerify"; //or whatever page
}
@Autowired
private CountryDao countryDao; //put these at the bottom so we don't have to scroll as much to get to the meat of the code
}
我不太清楚您发布的代码中是否需要@Transactional
。我希望你的服务或DAO层。
<body>
<h1>
<spring:message code="register.message" />
</h1>
[...]
<form:form modelAttribute="user" action="/registerVerify" method="post">
[...]
<spring:message code="register.country" />
<form:select path="country" items="${countryList}" />
[...]
<input type="submit" value="<spring:message code='register.submit'/>" />
</form:form>
</body>
这假设country
是user
的属性。您还可以将方法名称更改为getCountries()
而不是getCountryMap()
。