<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document
	PUBLIC "-//Apache Software Foundation//DTD XDOC 1.0//EN"
	"http://maven.apache.org/dtd/xdoc_1_0.dtd">
<document>
	<properties>
		<title>Extension - 概念 - PRGパターン</title>
	</properties>
	<body>
		<section name="PRGパターン">
			<ul>
				<li>
					<a href="#概要">概要</a>
				</li>
				<li>
					<a href="#URLのズレ">URLのズレ</a>
				</li>
				<li>
					<a href="#PRGパターンの場合">PRGパターンの場合</a>
				</li>
				<li>
					<a href="#自画面表示の場合">自画面表示の場合</a>
				</li>
			</ul>
		</section>

		<section name="概要">
			<p>
				Teeda Extensionは， 画面遷移にPRG (POST-REDIRECT-GET)
				パターンを採用しています．
			</p>
			<p>
				PRGパターンとは， POSTメソッドによるリクエストに対してリダイレクトを返し，
				GETメソッドの応答として遷移先の画面を表示するというものです．
			</p>
		</section>

		<section name="URLのズレ">
			<p>
				ページモデルを採用した場合， 画面遷移の際にブラウザのアドレスバーに表示されるURLと，
				実際に表示されている内容がずれる場合があります．
			</p>
			<p>以下の例では，aaa.htmlのフォームをサブミットしてbbb.htmlに画面遷移します．</p>
			<img src="../../images/extension/concept/prg1.png" width="466"
				height="373" alt="URLのズレ" />
			<p>
				aaa.htmlに対応するAaaPageから， bbb.htmlに対応するBbbPageに (Servlet
				APIの)
				forwardで画面遷移すると，ブラウザのアドレスバーにはリクエストしたURLであるaaa.htmlが表示されたままですが，
				表示されている内容はbbb.htmlとなります．
			</p>
		</section>

		<section name="PRGパターンの場合">
			<p>
				Teedaでは，PRGパターンを採用することにより，
				画面遷移しても画面遷移の際にブラウザのアドレスバーに表示されるURLと，
				実際に表示されている内容がずれないようにしています．
			</p>
			<p>以下の例では，aaa.htmlのフォームをサブミットしてbbb.htmlに画面遷移します．</p>
			<img src="../../images/extension/concept/prg2.png" width="466"
				height="448" alt="PRGパターンの場合" />
			<p>
				aaa.htmlに対応するAaaPageは， bbb.htmlへのリダイレクトをレスポンスとして返します．
				そのため，ブラウザはbbb.htmlをGETメソッドで要求し，その結果としてbbb.htmlが表示されます．
				ブラウザのアドレスバーはリダイレクト先であるbbb.htmlとなるため， 表示内容とのズレが発生しません．
			</p>
			<p>
				また，PRGパターンで表示される画面はGETリクエストの結果であるため，
				通常ブラウザは画面をキャッシュすることが可能です． このため， 「戻る」「進む」ボタンが有効であり，
				意図しない二重サブミットを防ぐことができます．
			</p>
		</section>

		<section name="自画面表示の場合">
			<p>
				PRGパターンが使われるのは， 他の画面に遷移する場合だけです．
				ポストバックされた画面がもう一度同じ画面を表示する場合はPRGパターンを使わず， 直接レスポンスを返します．
			</p>
			<img src="../../images/extension/concept/prg3.png" width="466"
				height="380" alt="次画面表示の場合" />
		</section>
	</body>
</document>
