Spring MVCのform:selectタグの使い方
今回は、Spring MVCのform:selectタグにフォーカスします!(課題でぶつかったので)
参考プログラム
まずは前準備
User.java(userId,name,ageのgetter,setterとコンストラクタ)
public class User { private int userId; private String name; private int age; User(int userId, String name, int age){ this.userId = userId; this.name = name; this.age = age; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
RegisterForm.java
Spring MVCのformタグを勉強している人にはおそらくお馴染み(?)
私的に言わせてもらうなら「欲しい情報を入れて取り出す、枠組みオブジェクト」
import java.io.Serializable; public class RegisterForm implements Serializable{ private int id; private String text; public String getText() { return text; } public void setText(String text) { this.text = text; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
InputController.java
次は肝心のコントローラー!
今回はGetでindex.jspに飛ばし、Postで同じURLに入ってRegisterForm.java の中の入力値をresult.jspで取り出します。
import java.util.ArrayList; import java.util.List; 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("/") public class InputController { @RequestMapping(method = RequestMethod.GET) public String behaveCheck(Model model) { List<User> userlist = new ArrayList<>(); userlist.add(new User(1,"a",20)); userlist.add(new User(2,"b",22)); userlist.add(new User(3,"c",24)); userlist.add(new User(4,"d",23)); RegisterForm registerForm = new RegisterForm(); model.addAttribute(registerForm); model.addAttribute("userlist", userlist); return "index"; } @RequestMapping(method = RequestMethod.POST) public String behaveResult(Model model,RegisterForm registerForm) { model.addAttribute(registerForm); return "result"; } }
ポイントはselectで選択するリストもmodelに格納すること!!
(今回はuserlistに相当します)
index.jsp
ここでようやくform : selectの登場です。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>入力</title> </head> <body> <form:form modelAttribute="registerForm"> ユーザーセレクト <form:select path="id"> <form:options items="${userlist}" itemLabel="name" itemValue="userId"/> </form:select> テキスト入力<form:input path="text" /> <form:button>送信</form:button> </form:form> </body> </html>
ポイントは
pathの中の値はRegisterForm.java のフィールドだけ
form:optionsのitems属性にはmodelに格納したリスト(今回はuserlist)
form:optionsのitemLabel,itemValueにはuser(リストに入っているオブジェクト)のフィールドを指定する
itemLabel→jspに表示される値
itemValue→registerFormに格納される値(今回はregisterFormのidにselectしたuserIdが入ります)
result.jsp
InputControllerを経由してregisterFormに格納された値を確認
(EL式で出力しただけ!適当!)
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>結果</title> </head> <body> ${registerForm.id} ${registerForm.text} </body> </html>
${registerForm.id}でselectしたuserIdが表示
${registerForm.text}でテキストボックスに入れたテキストが出力
まとめ
これで出力されたuserIdの人が、がテキスト「〜(任意)〜」を入力したんだってのが管理できるわけだ! 今回は以上!