Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BindingResult和bean名称错误的普通目标对象-bean类名重要吗?_Java_Spring_Jsp - Fatal编程技术网

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">