Bonjour,

SVP est ce que vous pouvez m'aider avec cette erreur qui surviens à chaque fois je veux éditer un 'user


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
registration.jsp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
CRMUserController.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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";
		}
CRMUserDAOImpl.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;	
 
	}
 
 
	}
PS: j'ai essayé d'utiliser @ModelAttribute("user) au lieu de @Valid mais ça donne l'erreur 404