SpringMVCでデータ送信(POST)する

SpringMVCでデータ送信(POST)する

SpringMVCでテキストボックスに入力したデータを次画面に表示するサンプルです。

初期表示のコントローラです。

package jp.co.confrage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("sample")
public class HomeController {

  private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

  @RequestMapping(value = "home", method = RequestMethod.GET)
  public String home(Model model) {
    logger.info("Welcome Sample Page.");

    model.addAttribute(new HomeForm());

    return "home";
  }
}

ModelにHomeFormをaddしないと、以下のエラーが出ます。

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

初期表示のjspです。共通ヘッダはweb.xmlに定義します。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>

<P> Welcome Sample Page. </P>

<form:form action="post" method="post" modelAttribute="homeForm">
<form:label path="keyword">入力</form:label>
<form:input path="keyword" />
<form:errors path="keyword" cssStyle="color:red" />
<input type="submit" value="送信" />
</form:form>
</body>
</html>

フォームは以下です。Lombokを使用しているのでコンストラクタ、getter,setterは記述していません。

package jp.co.confrage;

import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class HomeForm implements Serializable {
  private static final long serialVersionUID = 1L;
  private String keyword;
}

送信ボタン押下時のコントローラです。

package jp.co.confrage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("sample")
public class PostController {

  private static final Logger logger = LoggerFactory.getLogger(PostController.class);

  @RequestMapping(value="post", method=RequestMethod.POST)
  public String aiueo(HomeForm form, Model model) {
    logger.info("Post : " + form.getKeyword());

    model.addAttribute("postData", form.getKeyword());
    return "post";
  }
}

form.getKeyword()に値がセットされています。

表示するJSPです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>

<P> Time on the server is ${postData}. </P>

</body>
</html>

コメント

タイトルとURLをコピーしました