Ajaxの考え方は、アプリケーションが常に新しいページをロードするのではなく、バックグラウンドでAjaxリクエストを使用して新しいコンテンツをロードすることです。とにかくアプリケーションに「ディープリンク」を提供するには、などのフラグメント部分を含むURLが必要ですexample.com/myapp#mystate
。URLのフラグメント部分のみが変更された場合、ブラウザはページをリロードしないため、このトリックが使用されます。
これはRAPと同じです。この種のURLを処理するために、RWTはブラウザ履歴APIを提供します。アプリケーションの状態が変化した場合、たとえば、ユーザーが何らかのタブを選択したり検索を開始したりした場合、ブラウザーの履歴に新しいエントリを追加できます。これにより、ブラウザーのURLのフラグメントが効果的に変更されます。
RWT.getBrowserHistory().createEntry( "!mystate", "Example" );
これにより、URLがexample.com/app/entrypoint#!mystate
(この状態への「ディープリンク」)に変更され、「Example」という名前のエントリがブラウザの履歴に追加されるため、ブラウザの戻るボタンを使用して後でこの状態に戻ることができます。
URLの変更に対応できるようにするには、ブラウザの履歴にリスナーを追加する必要があります。このリスナーは、フラグメント部分が変更されるたびに通知されます。これは、アプリケーションがフラグメントで開始された場合にも当てはまります(誰かがディープリンクをたどります)。次に、アプリケーションは、このフラグメントによって表される状態を再インストールする責任があります。
RWT.getBrowserHistory().addBrowserHistoryListener( new BrowserHistoryListener() {
public void navigated( BrowserHistoryEvent event ) {
// show state represented by event.entryId
}
} );
さまざまな「サブページ」にフラグメントURLを使用するRAPアプリケーションの例は、RAPの例のデモです。
ストーリーの残りの部分は、GoogleのAJAXクロールガイドで説明する必要があります。!
のようなフラグメントを含むURLを生成するには、IDをaで始める必要があります#!mystate
。これらのURLは、サイトマップに追加する必要があるURLです。?_escaped_fragment_=mystate
クローラーにフィードするために、URLパターンへの要求をキャッチし、特定の状態のHTML表現を返すサーブレットフィルターを実装できます。