web-dev-qa-db-fra.com

Statut HTTP 400 - Le paramètre entier obligatoire 'id' n'est pas présent

J'ai un problème lorsque je construis un projet Spring + Spring MVC + Hibernate + MySQL.

Tout fonctionne bien, mais lorsque je reçois "editpage" et que je souhaite ensuite publier des informations de montage dans MySQL, l'erreur suivante s'affiche sur mon Tomcat:

HTTP Status 400 - Required Integer parameter 'id' is not present

Classe de contrôleur

@RequestMapping(value = "/users/edit", method = RequestMethod.POST)
public String saveEdit(@ModelAttribute("userAttribute") User user,
                       @RequestParam(value = "id", required =   
true)Integer id, Model model){

    logger.debug("Received request to update person");

    user.setId(id);

    personService.edit(user);

    model.addAttribute("id", id);

    return "editedpage";
}

Classe de service

public void edit(User user){

    logger.debug("Editing existing user");

    Session session = sessionFactory.getCurrentSession();

    User existingUser = (User) session.get(User.class, user.getId());

    existingUser.setLogin(user.getLogin());
    existingUser.setPassword(user.getPassword());
    existingUser.setReal_name(user.getReal_name());

    session.save(existingUser);
}

Ma page JSP

<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ page language="Java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">

<head>
<!-- Bootstrap core CSS -->
<link href="<c:url value="/resources/styles/bootstrap.min.css" />"        
rel="stylesheet">
<script src="<c:url value="../../resources/javascripts  
/non-empty_validation_editpage.js"/>"></script>

<title>Editing page</title>

</head>

<body>

<h1 style="text-align: center">Edit page</h1>

<c:url var="saveUrl" value="/main/users/edit?id = ${userAttribute.id}"/>
<form:form modelAttribute = "userAttribute" method = "POST" action =  
"${saveUrl}">

<div style="width: 300px; height: 500px; margin: auto;">

<div class="form-group" >
<form:label path = "id">id:</form:label>
<form:input type = "id" name = "id" path = "id" disabled="true"  
class="form-control" />

</div>

<div class="form-group">
  <form:label path = "login">Login</form:label>
  <form:input type = "login" name = "login" path = "login" class="form- 
control"  placeholder="new login"/>

</div>

<div class="form-group">
<form:label path = "password">Password</form:label>
<form:input type = "password" name = "password" path = "password" 
class="form-control"  placeholder="new password"/>

</div>

<div class="form-group">
<form:label path = "real_name">Real name</form:label>
<form:input type = "real_name" name = "real_name" path = "real_name" 
class = "form-control"  placeholder = "new Real name"/>

</div>

<input type="submit" class="btn btn-success" value="Save"  style="width:  
300px"/>

</div>

</form:form>

</body>
</html>
5
O.Kuz

Cela arrive généralement lorsque les informations requises dans votre méthode

@RequestParam (value = "id", required = true) id entier

dans ce cas, id n'est pas présent en tant que paramètre de requête chaque fois que vous publiez les données sauvegardées. Essayer de coder en dur n'importe quel nombre au lieu de @RequestParam (value = "id", required =
true) Integer id, vous devriez pouvoir sauvegarder les données. Une autre façon est de passer de required = true à false uniquement à des fins de test et de voir si cela fait une différence

0
user3509208

Si vous demandez l'accès à la méthode Get, le chemin de l'URL doit contenir param id. Si POST, vous pouvez coder en dur @RequestParam(value = "id", required =false)

0
zehao chen