2011-07-06 17 views
2

私のWebアプリケーションには、search1.jsfとsearch2.jsfの2つの検索ページがあり、同じbeanを共有し、同じbeanを共有し、結果ページをresult-jsfと呼びます。JSF 2 - 呼び出し元ページに戻るためにはどのような方法がありますか?

だから、両方の検索ページはのcommandButton

<h:commandButton value="Commit" action="#{search.commit}" /> 

Beanは、[今すぐresult.jsfは知りません

target = "result?faces-redirect=true"; 

を使用して結果ページに転送し、検索を処理し、「検索」を持っています検索ページが使用されています。呼び出されたページが呼び出しページにリンクを戻すことができるように呼び出しページを渡すにはどうすればよいですか?

履歴に戻るためにブラウザの戻るボタン(またはJavascriptコード)を使用すると、結果をブラウズした後、ユーザーは「上」に移動するのではなく、結果に1ページ戻ってしまうという欠点があります。検索パラメータフォーム。

  • <f:param>を使用して、結果ページにチェーンを介して発信者のページ名を渡すか、アクション= "#{search.commit(name_of_calling_page)}

  • :私は今のところである参照

    オプション

    は1つのJSFページにすべての「検索パラメータ」フォームを入れて、条件付きコンテンツ

かの名前を返すJSFの機能があるの切り替え呼び出しJSFページ?

答えて

3

結果を保持するためにセッションスコープのBeanを使用していることを示唆する結果ページにリダイレクトしています(リクエスト/ビューのスコープは単純にリダイレクトに影響しません)。これが貧弱な/奇妙なアプローチであるという事実を無視して、検索タイプをそのBeanにも格納できますか?

とにかく、最も簡単で最もクリーンは、単一のマスター・ビューと単一のマスター・ビューを使用することであるマスタービューで<ui:include>を使用してBeanと条件付き表示search1.xhtmlsearch2.xhtmlresults.xhtmlスコープ。

search.xhtml

<ui:fragment rendered="#{empty search.results}"> 
    <ui:include src="/WEB-INF/search#{search.type}.xhtml" /> 
</ui:fragment> 
<ui:fragment rendered="#{not empty search.results}"> 
    <ui:include src="/WEB-INF/results.xhtml" /> 
</ui:fragment> 

限り、あなたはアクションメソッド内voidまたはnullを返すと、同じビューは、Beanが後続のすべての(と非リダイレクト!)リクエストに応じて保持されますスコープ。あなたがPOSTの代わりにGET(それがブックマーク可能で、Googleのように戻ることができるように)をしたいのであれば、実際にフォームとビューのパラメータを変更して、POSTではなくGETにしてください。

関連する問題