Neither BindingResult nor plain target object for bean name 'userProfile' available as request attribute

12,235

Solution 1

I wasn't noticed that I have to implement method for form creation which will provide instance of UserProfile. I've added 2 methods and now everything works fine.

@RequestMapping("/")
public String home() {
    return "redirect:/index";
}

@RequestMapping(value = "/index", method = RequestMethod.GET)
public String createRegisterForm(Map<String, Object> model){
    model.put("userprofile", new UserProfile());
    return "index";
}

Solution 2

Add modelAttribute="userProfile" to the <form:form> tag.

<form:form method="post" action="add" commandName="userProfile" modelAttribute="userProfile">
Share:
12,235
Fedor Skrynnikov
Author by

Fedor Skrynnikov

Trying to design and implement My Life program but can't find the test cases and spec :)

Updated on June 04, 2022

Comments

  • Fedor Skrynnikov
    Fedor Skrynnikov almost 2 years

    I've encountered the folowing exception while I was trying to implement my first spring+hibernate web app:

    java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'userProfile' available as request attribute
        at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
        at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:174)
        at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:194)
        at org.springframework.web.servlet.tags.form.LabelTag.autogenerateFor(LabelTag.java:129)
        ...
    

    UserController.java:

    @Controller
    public class UserController {
    
        @Autowired
        private UserProfileService userProfileService;
    
        public UserController(){
    
        }
    
        @RequestMapping(value="/add", method=RequestMethod.POST)
        public String registerUser(@ModelAttribute("userProfile") UserProfile userProfile, BindingResult result, Map model){
    
            userProfileService.addUserProfile(userProfile);
    
            return "redirect:/login";
        }
        ...
    }
    

    UserProfile.java

    @Entity
    @Table(name="USER_PROFILE")
    public class UserProfile {
        @Id
        @GeneratedValue
        @Column(name = "ID")
        private Long id;
    
        @Column(name = "USERNAME")
        private String userName;
    
        @Column(name = "PASSWORD")
        private String password;
    
        //sets and gets
    }
    

    index.jsp

    <form:form method="post" action="add" commandName="userProfile">
        <table>
            <tr>
                <td><form:label path="userName"><spring:message code="label.username" /></form:label></td>
                <td><form:input path="userName" /></td>
            </tr>
            <tr>
                <td><form:label path="password"><spring:message code="label.password" /></form:label></td>
                <td><form:password path="password" /></td>
            </tr>
            <tr>
                <td><input type="submit" value="<spring:message code="label.adduser" />"></td>
            </tr>
        </table>
    </form:form>