コントローラの実装
作成したDAOを経由してMyDataを利用するコントローラを作成する。
新規でコントローラクラスを作成する。
クラス名: MyDataController
MyDataController.java
package jp.abc; 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 public class MyDataController { @RequestMapping(value = "/mydata", method = RequestMethod.GET) public String mydata(Model model) { return "mydata"; } }
新規にJSPファイルを作成する。
src/main/webapp/WEB-INF/view/mydata.jsp
最初は動作確認のために、シンプルなJSPを作成する。
mydata.jsp
<!DOCTYPE html> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>MyData</title> </head> <body> <h1>${title}</h1> <p>${message}</p> </body> </html>
次に、サーバーから受け取ったデータを表示できるようにJSPを変更する。
mydata.jsp
<!DOCTYPE html> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>MyData</title> </head> <body> <h1>${title}</h1> <p>${message}</p> <table> <form:form modelAttribute="myData"> <form:errors path="*" /> <form:hidden path="id"/> <tr> <td><form:label path="name">名前</form:label></td> <td><form:input path="name" size="20" /></td> </tr> <tr> <td><form:label path="age">年齢</form:label></td> <td><form:input path="age" size="20" /></td> </tr> <tr> <td><form:label path="mail">メール</form:label></td> <td><form:input path="mail" size="20" /></td> </tr> <tr> <td><form:label path="memo">メモ</form:label> <td><form:textarea path="memo" cols="20" rows="5" /></td> </tr> <tr><td></td><td><input type="submit"></td></tr> </form:form> </table> <hr /> <c:if test="${datalist != null}"> <table border="1"> <tr><th>ID</th><th>名前</th></tr> <c:forEach var="obj" items="${datalist}" varStatus="status"> <tr> <td>${obj.id}</td> <td>${obj.name}</td> </tr> </c:forEach> </table> </c:if> </body> </html>
この状態で http://localhost:8080/MyData/mydata/ にアクセスするとJSPが必要としているデータが設定されていないためにエラーになる。
JSP側でアクセスしようとしているデータを、MyDataController で設定する。
MyDataController.java
package jp.abc; 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 public class MyDataController { @RequestMapping(value = "/mydata", method = RequestMethod.GET) public String mydata(Model model) { model.addAttribute("title", "MyData"); model.addAttribute("message", "データを入力してください"); MyData mydata = new MyData(); model.addAttribute("myData", mydata); return "mydata"; } }
MyDataControllerで必要なデータを設定すれば、画面を表示できるようになる。
バリデーションを有効にするために、pom.xml に dependency を追加する。
pom.xml
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.0.1.Final</version> </dependency>
今の設定ではTomcatを再起動するとデータベースのテーブルが初期化されるので、設定を変更してデータベースサーバーに保存できるようにする。
Eclipseマーケットプレイスで「HSQLDB」を検索し、「HSQLDB Database Server」をインストールする。
インストール後にEclipseが再起動したら、[ウィンドウ]-[ビューの表示]-[その他]を選択。
「HSQLDB Server」を選択して「OK」すると、下のタブに「HSQLDB Server」が追加される。
以下、設定の変更。
persistence.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbc.JDBCDriver" /> <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:hsql://localhost/mydatabase" /> </properties> </persistence-unit> </persistence>
database.properties
database.driverClassName=org.hsqldb.jdbc.JDBCDriver database.url=jdbc:hsqldb:hsql://localhost/mydatabase database.username=sa database.password=
データベースサーバーに接続できるようになったので、コントローラにコードを追加する。
MyDataController.java
package jp.abc; import java.util.List; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class MyDataController { @RequestMapping(value = "/mydata", method = RequestMethod.GET) public String mydata(Model model) { model.addAttribute("title", "MyData"); model.addAttribute("message", "データを入力してください"); MyData mydata = new MyData(); model.addAttribute("myData", mydata); MyDataDao<MyData> dao = new MyDataDaoImpl(); List<MyData> list = dao.getAll(); model.addAttribute("datalist", list); return "mydata"; } @RequestMapping(value = "/mydata", method = RequestMethod.POST) public String form(@Valid @ModelAttribute MyData mydata, Errors errors, Model model) { if (errors.hasErrors()) { model.addAttribute("title", "MyData - エラー"); model.addAttribute("message", "値をチェックしてください"); return "mydata"; } MyDataDao<MyData> dao = new MyDataDaoImpl(); dao.add(mydata); return "redirect:/mydata"; } }