atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
とりあえず雑記帳(跡地)
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
とりあえず雑記帳(跡地)
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
とりあえず雑記帳(跡地)
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • とりあえず雑記帳(跡地)
  • Slim3
  • とりあえずSlim3アプリケーションを作ろう
  • Controllerで画面作成

とりあえず雑記帳(跡地)

Controllerで画面作成

最終更新:2012年03月09日 00:31

fujiyan

- view
管理者のみ編集可

Controllerとはなんぞや

  • Controllerは、「Slim3としては」URLに関連付けられたアクションであり、ブラウザ等からそのURLでリクエストが送られた際に実行されます。
    • 通常は、Controllerで処理が実行された後、その結果をjspで出力します。
    • ということで、Controllerを作成する際には、通常はControllerクラスとjspのセットで作成します。
    • 「Slim3としては」という但し書きをしましたが、一般論としてのControllerの役割も勿論あります(そのうち説明の予定)。
  • URLのパス階層と、Controllerのサブパッケージ階層が対応するように作成します。
    • クラス名は、URLのパス階層の末尾(先頭は大文字)+Controllerとします。
    • URLのパス階層の末尾がスラッシュで終わる場合は、IndexControllerとします。
    • [Root Package]がjp.fujiyan.booklistの場合
リクエストのURL 必要なController
/ jp.fujiyan.booklist.controller.IndexController
/show jp.fujiyan.booklist.controller.ShowController
/sub/ jp.fujiyan.booklist.controller.sub.IndexController
/sub/show jp.fujiyan.booklist.controller.sub.ShowController



一覧画面のControllerを作成する

  • 一覧画面を基点にして、登録/変更画面に遷移するので、まずは一覧画面を作成してみましょう。
  • Modelの作成時にも利用した、build.xmlから[gen-controller]targetを実行します。
  • ダイアログが表示されるので、作成するControllerに対応するURLパスを入力します。
    • 今回は/book/showBookListというURLを入力します。
    • すると、jp.fujiyan.booklist.controller.book.ShowBookListControllerというクラスと、/war/book/showBookList.jspというjspファイルが生成されます。

package jp.fujiyan.booklist.controller.book;
 
import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
 
public class ShowBookListController extends Controller {
 
    @Override
    public Navigation run() throws Exception {
        return forward("showBookList.jsp");
    }
}
 

<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="f" uri="http://www.slim3.org/functions"%>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>book ShowBookList</title>
</head>
<body>
<p>Hello book ShowBookList !!!</p>
</body>
</html>
 



詳細画面のControllerを作成する

  • とはいえ、登録が出来なければ一覧表示も出来ないので、詳細画面も作成して、一覧画面から遷移するようにしましょう。
  • もう一度、build.xmlから[gen-controller]targetを実行します。
  • ダイアログが表示されるので、作成するControllerに対応するURLパスを入力します。
    • 今回は/book/showBookDetailというURLを入力します。
    • すると、jp.fujiyan.booklist.controller.book.ShowBookDetailControllerというクラスと、/war/book/showBookDetail.jspというjspファイルが生成されます。
package jp.fujiyan.booklist.controller.book;
 
import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
 
public class ShowBookDetailController extends Controller {
 
    @Override
    public Navigation run() throws Exception {
        return forward("showBookDetail.jsp");
    }
}
 

<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="f" uri="http://www.slim3.org/functions"%>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>book ShowBookDetail</title>
</head>
<body>
<p>Hello book ShowBookDetail !!!</p>
</body>
</html>
 



まぁ、とりあえず表示してみましょう。

  • 実行するには、プロジェクトを選択しておいて、メニューの[Run]-[Debug As]-[Web Application]を選択します。
  • デフォルトの設定なら、8888ポートでアクセスできます。
  • まずは一覧画面。Controller作成時に入力したパス、/book/showBookListを指定します。

  • 続いて詳細画面。やはりController作成時に入力したパス、/book/showBookDetaliを指定します。



一覧画面に新規登録リンクを設置

  • まずは、showBookList.jspを修正して、詳細画面へ新規登録モードで遷移するための「新規登録」リンクを設置します。
    • リンクのURLの生成に、Slim3が提供しているJSP Functionである、url()を用いています。
    • url()は引数で指定したリソースへの、コンテキスト相対パスを生成します。
      • 例えば、/book/showBookListで生成されるJSPでurl('test')と指定すると、"/book/test"というURLが生成されます。
    • 今回は、詳細画面のControllerである、/book/showBookDetailを指すので、url()には'showBookDetail'を指定します。
  • ついでなんで、titleも変えときましょう。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>本一覧</title>
</head>
<body>
<a href="${f:url('showBookDetail')}">新規登録</a>
</body>
</html>
 

生成されたHTMLソース
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>本一覧</title>
</head>
<body>
<a href="/book/showBookDetail">新規登録</a>
</body>
</html>
 



詳細画面に入力フォームを設置

  • つぎは、showBookDetail.jspを修正して、詳細画面に入力フォームを設置します。
  • 今のところは、只のHTML/JavaScriptの内容です。
<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="f" uri="http://www.slim3.org/functions"%>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>本詳細</title>
</head>
<body>
<form>
<table>
<tr>
<th>作品名</th><td><input type="text" size="80"/></td>
</tr>
</table>
<input type="submit" value="更新" onclick="return confirm('更新しますか?');"/>
<input type="button" value="戻る" onclick="history.back();"/>
</form>
</body>
</html>
 




更新機能の実装の前に…、ちょっとSlim3を離れてWebアプリケーション一般論

  • HTTPでのリクエストには主にGETメソッドとPOSTメソッドがあります(それ以外は、まぁ使いません)。
  • どっちも、リクエストを与えるとレスポンスが返ってくる、という点で同じ動きではありますが、意味合いが違います。
  • なので、Webアプリケーションでは、両者を「正しく」使い分けることが重要です。
  • GETは「情報を取得する」メソッドで、POSTは「情報を送信する」メソッドです。この違いは、キャッシュが無効になってしまったときに現れます。
  • GETメソッドの場合は、再びGETメソッドで取得します。見た目上は、キャッシュの有効時/無効時ではあまり違いが無いです。
  • 一方POSTメソッドの場合は、キャッシュが無効な場合は、レスポンスの取得のため、再び情報を送信しようとします。
    • ブラウザの「戻る」ボタンで、フォームデータ送信等のPOSTメソッドのリクエストまで戻ると、「フォームデータの再送信がうんたらかんたら」が出るのはそのためです。
  • POSTメソッドのレスポンスは、リダイレクトでGETメソッドに挿げ替えることによって、「戻る」ボタンで戻っても「再送信うんたら」は出なくなります。
  • ということで、POSTメソッドは出来るだけリダイレクトでGETメソッドに挿げ替え、履歴上を極力GETメソッドだけにしてしまいましょう。
  • そうすれば「戻る」ボタンで自由に戻れるWebアプリケーションになります。
  • よく「戻る」ボタンは敵視されることもありますが、「Web」アプリケーションなのですから、「戻る」ボタンを生かすように努めましょう。
    • とは言え「戻る」ボタンで戻った当時の状態を再現せよ、というわけではないですよ。データ更新後に、「戻る」で戻った場合に更新後の情報が表示されるのは、まぁ良しじゃないでしょうか。



前置きはコレくらいにして、更新Controllerを作成する

  • さて、入力フォームのsubmit先となる、更新Controllerを作成します。
  • 更新処理はPOSTメソッドでリクエストし、その後一覧画面Controllerにリダイレクトするようにします。
  • よって、更新ControllerのJSPは不要です。
  • JSPを伴わないControllerを作成する場合は、build.xmlから[gen-controller-without-view]targetを実行します。
  • ダイアログが表示されるので、作成するControllerに対応するURLパスを入力します。
    • 今回は/book/putBookというURLを入力します。
    • すると、jp.fujiyan.booklist.controller.book.PutBookControllerというクラスが生成されます。
package jp.fujiyan.booklist.controller.book;
 
import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
 
public class PutBookController extends Controller {
 
    @Override
    public Navigation run() throws Exception {
        return null;
    }
}
 
  • 実際の更新処理を実装する前に、処理後に一覧画面Controllerにリダイレクトするようにしてみましょう。
  • リダイレクトさせるには、redirect()メソッドにリダイレクト先を指定して、戻り値のNavigationをrun()の戻り値にします。
public class PutBookController extends Controller {
 
    @Override
    public Navigation run() throws Exception {
        return redirect("showBookList");
    }
}
 
  • あと、入力フォームのsubmit先に更新Controllerを指定します。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>本詳細</title>
</head>
<body>
<form action="putBook" method="POST">
<table>
<tr>
<th>作品名</th><td><input type="text" size="80"/></td>
</tr>
</table>
<input type="submit" value="更新" onclick="return confirm('更新しますか?');"/>
<input type="button" value="戻る" onclick="history.back();"/>
</form>
</body>
</html>
 
「Controllerで画面作成」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • ShowBookDetail01.PNG
  • ShowBookDetail02.PNG
  • ShowBookList01.PNG
  • ShowBookList02.PNG
とりあえず雑記帳(跡地)
記事メニュー

メニュー

  • トップページ
  • コメント
  • とりあえずインターフェース入門
  • Yesod
  • Haskell
  • Slim3
  • JavaScript
  • Google App Engine
  • Android
  • Facebook
  • GWT
  • OpenSocial
  • Struts 2
  • Subversion
  • Apache
  • JSONIC
  • Flex

  • WebコミックLibraryについて

公式サイト

  • Yesod
  • Haskell
  • Slim3
  • JavaScript - MDN
  • App Engine for Java
  • Android Developers
  • Google Web Toolkit
  • Struts
  • OpenSocial
  • OSDE

  • ToDo

ここを編集
記事メニュー2
間違いの御指摘は
コメントまでm(_ _)m

更新履歴

取得中です。


ここを編集

総数: -
本日: -
昨日: -
人気記事ランキング
  1. Slim3/とりあえずSlim3アプリケーションを作ろう/Controllerで画面作成
  2. Struts 2
もっと見る
最近更新されたページ
  • 4400日前

    Haskell
  • 4400日前

    Yesod
  • 4400日前

    トップページ
  • 4510日前

    メニュー
  • 4511日前

    Struts 2
  • 4537日前

    コメント
  • 4706日前

    Google App Engine
  • 4743日前

    Slim3/環境構築とプロジェクト作成
  • 4767日前

    Google App Engine/キャッシュの計画
  • 4778日前

    Slim3/文字列の部分一致検索とページング
もっと見る
人気記事ランキング
  1. Slim3/とりあえずSlim3アプリケーションを作ろう/Controllerで画面作成
  2. Struts 2
もっと見る
最近更新されたページ
  • 4400日前

    Haskell
  • 4400日前

    Yesod
  • 4400日前

    トップページ
  • 4510日前

    メニュー
  • 4511日前

    Struts 2
  • 4537日前

    コメント
  • 4706日前

    Google App Engine
  • 4743日前

    Slim3/環境構築とプロジェクト作成
  • 4767日前

    Google App Engine/キャッシュの計画
  • 4778日前

    Slim3/文字列の部分一致検索とページング
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 鹿乃つの氏 周辺注意喚起@ウィキ
  2. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  3. MadTown GTA (Beta) まとめウィキ
  4. R.E.P.O. 日本語解説Wiki
  5. AviUtl2のWiki
  6. シュガードール情報まとめウィキ
  7. ソードランページ @ 非公式wiki
  8. ドラゴンボール Sparking! ZERO 攻略Wiki
  9. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  10. 星飼いの詩@ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  6. 検索してはいけない言葉 @ ウィキ
  7. オレカバトル アプリ版 @ ウィキ
  8. 発車メロディーwiki
  9. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  10. 英傑大戦wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 過去の行動&発言まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  2. マイティーストライクフリーダムガンダム - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  3. 魚拓まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  4. 参加者一覧 - ストグラ まとめ @ウィキ
  5. 1103環境(遊戯王) - アニヲタWiki(仮)
  6. 前作からの変更点 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  8. コレクター・ユイ - アニヲタWiki(仮)
  9. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  10. 画像倉庫 - 鹿乃つの氏 周辺注意喚起@ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.