あなたが望むものを達成するための多くの方法があります。まず、あなたのアプローチの代替案について説明し、次にSEOについていくつかのコメントを投稿します。
通常のフォームを使用して、変更イベントで送信します
まず、ユーザーが変更イベントでフォームを暗黙的に送信する場合、通常のフォーム送信を介してナビゲーションを処理できます。
<h:form>
<h:selectOneMenu value="#{bean.currentPage}" converter="pageConverter" onchange="submit()">
<f:selectItems value="#{bean.pages}" var="page" itemLabel="#{page.name}" />
</h:selectOneMenu>
<h:commandButton value="submit" action="#{bean.handleNavigation}" style="display:none"/>
</h:form>
と
@FacesConverter("pageConverter")
およびマネージドBean(@ManagedBean Bean
)
private List<Page> pages;
private Page selectedPage;
public String handleNavigation(){
//do some job before navigation
return (selectedPage == null) ? null : selectedPage.getUrl();
}
およびモデルクラス
class Page {
private String name;//title in links
private String url;//JSF view-id
}
意味のあるクライアントボタンクリックのナビゲーション
ドロップボックスを使用して、ユーザー選択の選択を維持し、ナビゲーションを実行するためのボタンを使用できます。
<h:form>
<h:selectOneMenu value="#{bean.currentPage}" converter="pageConverter">
<f:selectItems value="#{bean.pages}" var="page" itemLabel="#{page.name}" />
</h:selectOneMenu>
<h:commandButton value="Navigate" action="#{bean.performNavigation}"}/>
</h:form>
上記と同じモデルで。
に基づく<h:link>
ナビゲーション
あなたは単純な<h:link>
sで仕事をナビゲートしますか:
<ul>
<ui:repeat var="page" value="#{bean.pages}>
<li>
<h:link value="#{page.name}" outcome="#{page.url}" />
</li>
</ui:repeat>
</ul>
それに応じてこのメニューのスタイルを設定します。
SEOコメント
SEOは最近ますます重要になっているので、そのルールに従うことが不可欠です。上記のように(基本)クラスでページ上のリンクに名前を付けることに加えて、URL書き換えソリューションを使用することが重要ですPage
。これにより、ユーザーはwww.site.com/contact-us
ブラウザで表示され、表示されなくなりwww.site.com/contact.xhtml
ます。
IMHOをフォローする最も簡単な方法は、私の好みに合わせて、優れたソリューションであるPrettyfacesを使用することです。これにより、書き換えられたURLを非常に簡単に設定できます(そして、JSFコンポーネントのすべての内部URLを書き換えることができます)。
サイトのSEOコンポーネントを強化するために、モデルクラスにフィールドseoUrl
を導入し、WebブラウザのアドレスバーにJSFビューID(つまり)の代わりにPage
SEOに適したURL(つまり)を表示するPrettyfacesマッピングを作成できます。www.site.com/contact-us
www.site.com/contact.xhtml
編集-URL書き換えの必要性に関する論争
Googleが提案した、URL構造を参照するSEO対応ルールの背景:
- URLの構造を改善します。これにより、検索エンジンによるドキュメントのクロールが改善される可能性もあります(Google検索エンジン最適化ガイド)。
- ユーザーと検索エンジンの両方でURLをできるだけシンプルにするために時間を費やします。一部のウェブマスターは、動的URLを静的URLに書き換えることでこれを達成しようとしています(同じ参照、イタリック体)。
- URLに単語を使用します(今後の参照はすべてGoogleガイドからのものです)。
- 単純なディレクトリ構造を作成します。
- URLの一部が削除される可能性を考慮してください。
そして今、SEOスペシャリストからの一般的なガイドラインのいくつか:
- 最適化されたURLの作成(SEOに適したURL構文の実践を理解する);
- 静的は道と光です(URLの11のベストプラクティス);
- 可能な限り説明的なURLを選択してください(SEOとユーザーフレンドリーなURLを作成するために従うURLルール)など。
問題の私の検査:
- 静的に型付けされたページを使用している場合、そのURLはである可能性がありますが
www.site.com/contact-us.xhtml
、なぜ6文字の余分な文字があるのでしょwww.site.com/contact-us
うか。
- フェイスレットページは、のように深くネストされた内部構造に配置できますが、必要に応じて、パスがページに反映される
/pages/articles/general/how-to-do-jsf.xhtml
ようにURLを設定することをお勧めします。www.site.com/articles/how-to-do-jsf
- 一部の開発者は、ファセットの短いファイル名(
jsf-bp.xhtml
)または意味のないファイル名()を使用する傾向がありますが、 ;article23.xhtml
のURLを表示することをお勧めします。www.site.com/article/jsf-best-practices-for-beginners
- 拡張機能を使用すると
.xhtml
、.jsf
ユーザー(およびおそらく検索エンジン)は、のようにコンテンツが動的である(つまり、コンテンツがテンプレートからレンダリングされる)と考えるようになる可能性www.site.com/product.xhtml?id=12345
がありますが、ユーザーとしては静的コンテンツを優先する必要があります(そしておそらく検索エンジン)は、そのようなURLがのように完全にステートレスなページを記述していると考えるでしょうwww.site.com/products/jsf-book-for-advanced-users
。さらに、サイトの使いやすさを大幅に向上させます。これも非常に重要です。
?id=12345
人々はクエリパラメータ()にIDを使用し、パスパラメータ()に名前を使用する傾向があります/jsf-book-for-advanced-users
。
- URL書き換えは、サイトをナビゲートするための明確な方法を提供します。パスを想像してみてください
www.site.com/products/jsf-book-for-advanced-users
。このタイプのURL構造は、固有の製品ページをレンダリングし、削除/jsf-book-for-advanced-users
すると完全なカタログがレンダリングされる場合があります。www.site.com/product.xhtml?name=jsf-book-for-advanced-users
しかし、あなたが製品とwww.site.com/catalogue.xhtml
カタログのために持っているならば、何が起こるでしょうか?ユーザーにとって論理は不明確です。書き換えにより、URLの構造化が可能になります。
- 最後に、SEOを扱うほとんどのサイトは、ファイル拡張子を使用していません(そして、クエリパラメータをほとんど使用していません)。また、私たちがアクセスしているサイト、stackoverflow.comも同様です。
私が参照している情報源が議論の余地がない、非常に信頼できる、またはそれらの入力をすべてのWebアプリケーションなどに適用する必要があるとは主張しませんが、構造化された、ユーザーフレンドリーなサイトが長く存在すると信じています生産時間はこれらの規則に従う傾向があります。