web-dev-qa-db-ja.com

HTTPステータス400-必須の整数パラメータ「id」が存在しません

Spring + Spring MVC + Hibernate + MySQLプロジェクトをビルドするときに問題が発生します。

すべて正常に動作しますが、「editpage」を取得してから編集情報をMySQLに投稿したい場合、Tomcatから次のエラーが発生します。

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

コントローラクラス

@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";
}

サービスクラス

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);
}

私の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>
6
O.Kuz

これは通常、メソッドで必要な情報が

@RequestParam(value = "id"、required = true)整数ID

この場合、uが保存されたデータを投稿するときは常に、idはリクエストパラメータとして存在しません。 @RequestParam(value = "id"、required =の代わりに任意の数値をハードコーディングしようとしています
true)整数ID、データを保存できるはずです。もう1つの方法は、テスト目的でrequired = trueからfalseに変更し、違いが生じるかどうかを確認することです。

2
user3509208

Getメソッドへのアクセスをリクエストする場合、URLパスにはparam idが含まれている必要があります。POSTの場合、@RequestParam(value = "id", required =false)をハードコーディングできます。

0
zehao chen