Bonjour,
SVP est ce que vous pouvez m'aider avec cette erreur qui surviens à chaque fois je veux éditer un 'user :calim2:
registration.jspCode:
1
2
3
4 GRAVE: Servlet.service() for servlet [appServlet] in context with path [/crm] threw exception [java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute] with root cause java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute
CRMUserController.javaCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 <div class="generic-container"> <div class="well lead">User Registration Form</div> <form:form method="POST" modelAttribute="user" action="#" class="form-horizontal"> <form:input type="hidden" path="userID" id="userID" /> <div class="row"> <div class="form-group col-md-12"> <label class="col-md-3 control-lable" for="firstName">First Name</label> <div class="col-md-7"> <form:input type="text" path="firstName" id="firstName" class="form-control input-sm" /> <div class="has-error"> <form:errors path="firstName" class="help-inline"/> </div> </div> </div> </div> <div class="row"> <div class="form-group col-md-12"> <label class="col-md-3 control-lable" for="lastName">Last Name</label> <div class="col-md-7"> <form:input type="text" path="lastName" id="lastName" class="form-control input-sm"/> <div class="has-error"> <form:errors path="lastName" class="help-inline"/> </div> </div> </div> </div> <div class="row"> <div class="form-group col-md-12"> <label class="col-md-3 control-lable" for="email">Email</label> <div class="col-md-7"> <c:choose> <c:when test="${edit}"> <form:input type="text" path="email" id="email" class="form-control input-sm" disabled="true"/> </c:when> <c:otherwise> <form:input type="text" path="email" id="email" class="form-control input-sm" /> <div class="has-error"> <form:errors path="email" class="help-inline"/> </div> </c:otherwise> </c:choose> </div> </div> </div> <div class="row"> <div class="form-group col-md-12"> <label class="col-md-3 control-lable" for="password">Password</label> <div class="col-md-7"> <form:input type="password" path="password" id="password" class="form-control input-sm"/> <div class="has-error"> <form:errors path="password" class="help-inline" /> </div> </div> </div> </div> <div class="row"> <div class="form-group col-md-12"> <label class="col-md-3 control-lable" for="privileges">Privileges</label> <div class="col-md-7"> <form:select path="privileges" items="${user.privileges}" multiple="true" itemValue="userID" itemLabel="type" class="form-control input-sm"/> <div class="has-error"> <form:errors path="privileges" class="help-inline" /> </div> </div> </div> </div> <div class="row"> <div class="form-actions floatRight"> <c:choose> <c:when test="${edit}"> <input type="submit" value="Update" class="btn btn-primary btn-sm"/> or <a href="<c:url value='/usersMngmt' />">Cancel</a> </c:when> <c:otherwise> <input type="submit" value="Register" class="btn btn-primary btn-sm"/> or <a href="<c:url value='/usersMngmt' />">Cancel</a> </c:otherwise> </c:choose> </div> </div> </form:form> </div> </body> </html>
CRMUserDAOImpl.javaCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 @Controller public class CRMUserController { @Autowired private CRMUserService userService; @Autowired private PrivilegeService privilegeService; @Autowired MessageSource messageSource; /** * This method will list all CRM Users. */ @RequestMapping(value = {"usersMngmt", "/usersMngmt"}) public ModelAndView usersMngmt() { List<CRMUser> CRMUsersList = (ArrayList<CRMUser>)userService.getAllUsers(); Map<String, Object> model = new HashMap<String, Object>(); model.put("CRMUser", CRMUsersList); //privilegeList List<Privilege> privileges = (ArrayList<Privilege>)privilegeService.getAllPrivileges(); model.put("privileges", privileges); return new ModelAndView("usersMngmt", "model", model); } /** * This method will provide the medium to add a new user. */ @RequestMapping(value = { "/newuser" }, method = RequestMethod.GET) public String newUser(ModelMap model) { CRMUser user = new CRMUser(); model.addAttribute("user", user); model.addAttribute("edit", false); return "registration"; } /** * This method will be called on form submission, handling POST request for * saving user in database. It also validates the user input */ @RequestMapping(value = { "/newuser" }, method = RequestMethod.POST) public String saveUser(@Valid CRMUser user, BindingResult result, ModelMap model) { if (result.hasErrors()) { return "registration"; } /* * Preferred way to achieve uniqueness of field [email] should be implementing custom @Unique annotation * and applying it on field [email] of Model class [CRMUser]. * * Below mentioned peace of code [if block] is to demonstrate that you can fill custom errors outside the validation * framework as well while still using internationalized messages. * */ if(!userService.isUserEmailUnique(user.getUserID(), user.getEmail())){ FieldError emailError =new FieldError("user","email",messageSource.getMessage("non.unique.email", new String[]{user.getEmail()}, Locale.getDefault())); result.addError(emailError); return "registration"; } userService.saveUser(user); model.addAttribute("success", "User " + user.getFirstName() + " "+ user.getLastName() + " registered successfully"); //return "success"; return "registrationsuccess"; } /** * This method will provide the medium to update an existing user. */ @RequestMapping(value = { "/edit-user-{email}" }, method = RequestMethod.GET) //@ModelAttribute("user") public String editUser(@PathVariable String email, ModelMap model) { CRMUser user = userService.findByEmail(email); model.addAttribute("user", user); model.addAttribute("edit", true); return "registration"; } /** * This method will be called on form submission, handling POST request for * updating user in database. It also validates the user input */ @RequestMapping(value = { "/edit-user-{email}" }, method = RequestMethod.POST) //@ModelAttribute("user") public String updateUser(@Valid CRMUser user, BindingResult result, ModelMap model, @PathVariable String email) { model.addAttribute("user", user); if (result.hasErrors()) { return "registration"; } /*//Uncomment below 'if block' if you WANT TO ALLOW UPDATING SSO_ID in UI which is a unique key to a User. if(!userService.isUserSSOUnique(user.getId(), user.getSsoId())){ FieldError ssoError =new FieldError("user","ssoId",messageSource.getMessage("non.unique.ssoId", new String[]{user.getSsoId()}, Locale.getDefault())); result.addError(ssoError); return "registration"; }*/ userService.updateUser(user); model.addAttribute("success", "user " + user.getFirstName() + " "+ user.getLastName() + " updated successfully"); return "registrationsuccess"; }
PS: j'ai essayé d'utiliser @ModelAttribute("user) au lieu de @Valid mais ça donne l'erreur 404Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 @Repository @Transactional(value="txManager") public class CRMUserDAOImpl implements CRMUserDAO{ private static final Logger logger = LoggerFactory.getLogger(CRMUserDAOImpl.class); @Autowired private SessionFactory sessionFactory; @Override public CRMUser updateUser(CRMUser user) { sessionFactory.getCurrentSession().update(user); return user; } @Override public List<CRMUser> getAllUsers() { Session session = null; try { session = HibernateUtil.getSessionFactory().getCurrentSession(); } catch (HibernateException e) { session = HibernateUtil.getSessionFactory().openSession(); } Transaction tx = session.beginTransaction(); List<CRMUser> L = new ArrayList<CRMUser>(); try{ L = session.createQuery("SELECT cu FROM CRMUser cu").list(); tx.commit(); }catch(HibernateException e){ tx.rollback(); } return L; } @Override public boolean isUserEmailUnique(long userID, String email) { CRMUser user = findByEmail(email); return ( user == null || ( (user!=null) && (user.getUserID() == userID)) ); } @Override public void saveUser(CRMUser user) { Session session = null; try { session = HibernateUtil.getSessionFactory().getCurrentSession(); } catch (HibernateException e) { session = HibernateUtil.getSessionFactory().openSession(); } Transaction tx = session.beginTransaction(); try{ session.persist(user); tx.commit(); }catch(HibernateException e){ tx.rollback(); } } @Override public CRMUser findByEmail(String email) { System.out.println("1---Email : "+email); Session session = null; try { session = HibernateUtil.getSessionFactory().getCurrentSession(); } catch (HibernateException e) { session = HibernateUtil.getSessionFactory().openSession(); } Transaction tx = session.beginTransaction(); CRMUser user = null; try{ Query q = session.createQuery("FROM CRMUser cu WHERE cu.email=:email"); q.setParameter("email", email); q.executeUpdate(); user = (CRMUser) q.list(); System.out.println("2---Email : "+user.getEmail()); tx.commit(); }catch(HibernateException e){ tx.rollback(); } if(user!=null){ Hibernate.initialize(user.getPrivileges()); } return user; } }