Java BindingResult和bean名称错误的普通目标对象-bean类名重要吗?
我看到了一些与此相关的帖子。然而,我似乎看到了一些我不理解的东西。以下是我的代码的一部分:Java BindingResult和bean名称错误的普通目标对象-bean类名重要吗?,java,spring,jsp,Java,Spring,Jsp,我看到了一些与此相关的帖子。然而,我似乎看到了一些我不理解的东西。以下是我的代码的一部分: package com.mvctest; import java.util.List; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; import or
package com.mvctest;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.dao.User;
@Controller
public class LoginController {
@RequestMapping("/newAccount")
public String createAccountScreen (Model model) {
model.addAttribute("user", new User());
return "createaccountscreen";
}
@RequestMapping(value="/createAccount", method=RequestMethod.POST)
public String createAccount (@Valid User user, BindingResult result) {
if (result.hasErrors()) {
List<ObjectError> errors = result.getAllErrors();
for(ObjectError error : errors) {
System.out.println(error.getDefaultMessage());
}
return "createaccountscreen";
}
return "accountcreated";
}
并将jsp中的commandName更改为
<sf:form method="post"
action="${pageContext.request.contextPath}/createAccount"
commandName="myuser">
我得到以下错误
java.lang.IllegalStateException:bean名称“myuser”的BindingResult和普通目标对象都不能作为请求属性使用
本质上,我用“myuser”替换“user”
Bean类是“User”。这是否意味着commandName必须是“user”?您在执行GET或POST时遇到错误?我无法重现您的错误。你能确认这实际上就是那个变化吗?我在用POST。只有我提到的两个更改(一个调用addAttribute,另一个调用jsp文件中的commandName)是和否。问题是您的代码有缺陷。您的
createAccount
方法应该具有@ModelAttribute
。这做了两件事,首先它查找具有特定名称的属性(默认情况下是方法参数的名称),如果它不在那里,它将构造一个属性。如果没有,则不会将任何对象添加到模型中,至少不会以指定的名称添加。如果要确保使用某个对象,请将名称添加到注释中。i、 e.@modeldattribute(“myuser”)
。一旦添加modeldattribute注释,它就会工作。您说是和否。“是”是否意味着在没有ModelAttribute注释的情况下使用Bean类名?谢谢
model.addAttribute("myuser", new User());
<sf:form method="post"
action="${pageContext.request.contextPath}/createAccount"
commandName="myuser">