IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

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


Sujet :

Spring Java

  1. #1
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2012
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2012
    Messages : 203
    Points : 85
    Points
    85
    Par défaut Neither BindingResult nor plain target object for bean name 'user' available as request attribute
    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par sihamnet Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form:input type="hidden" path="userID" id="userID" />
    
    relisez attentivement…

  3. #3
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2012
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2012
    Messages : 203
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    relisez attentivement…
    une explication de l'erreur serait plus gentille de votre part

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
    <form:form method="POST" modelAttribute="user" action="#" class="form-horizontal">
    Tu as posté le formulaire vers le même URL, or pour ce path, il n'y a pas, du coté contrôleur, une méthode qui prend comme attribut user. Tu dois modifier la valeur de action de ton formulaire par rapport aux RequestMapping qui accepte l'attribut user par la méthode POST de ton controlleur selon ton besoin.

    A+.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2017, 16h44
  2. Réponses: 4
    Dernier message: 10/12/2014, 20h37
  3. Réponses: 1
    Dernier message: 07/03/2013, 13h18
  4. Réponses: 9
    Dernier message: 05/06/2012, 09h39
  5. Réponses: 1
    Dernier message: 31/12/2011, 01h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo