2012-09-22 28 views
7

私はPrettyFacesでJSF 2を使用していますが、<h:link><f:param>タグも広くブックマーク可能なページを取得するために使用しています(JSFアプリケーションでこれらのPOST要求をすべて忘れてしまいました)。JSF ajaxリクエストでリフレッシュするURL

ただし、これらのリンクの一部はページの小さな部分のみを変更します(主にユーザーが同じビューにいるとき)。そのため、代わりにajaxリクエストを送信する方が効果的です。ただし、<f:ajax><h:link>と使用できません。ちょうど<h:commandlink>です。私はコマンドリンクでも多くの方法でパラメータを送ることができますが、この場合、URLは要求後も同じままです。したがって、ページの内容と同期しなくなり、更新できません。

GETとajaxリクエストが混在するリンクを使用するサイト(ajaxでページを変更しているときに新しいURLを指す)を見たことがありますが、これまでのところ解決策は見つかりませんでした。

ajaxリクエストが完了した後(またはユーザーがクリックしたとき)、何らかの形でjsfでURLを更新できますか?または、いくつかの外部JSライブラリを使用する必要がありますか?

EDIT:ここで必要なJSライブラリは、新しいJavaScript履歴APIです。 More info. JSFはこのAPIを現在使用していないと思います。しかし、私はまだJSF開発者の視点からこの問題に興味があります。

JSFの今後のリリース予定ですか? <f:ajax><h:link>を組み合わせることは完璧な解決策になります。

+0

私は数ヶ月前にOmniFacesを見ました。残念ながら、これは安価ではありません。非常に同じ変更されたURLは、単一のプレーンなGETリクエストによってポストバックによって実行されるすべてのAjax変更を含む、望ましいJSFビュー状態を正確に返すことができるはずです。アプリケーション全体(セッション非依存)の方法でこれを達成するために必要なすべての情報は、GET URLを非常に長くします。 URLを短縮する方法はありますが、それでも...コンポーネントライブラリの詳細を考慮していません。 – BalusC

+0

ありがとうございます。私はそれを完全に理解していません。実際には、これはすでに行われています。これは、 ''は非Ajax GETリンクを生成するので、私はすでにこれを行っています。 - 私はすべて、代わりにajaxリクエストを送信し、以前に ''によって生成されたものにURLを設定することを望みます。それは ' 'でもよいし、何か他のものであってもかまいません。このように動作する必要があります。 – apcuk

+0

目的が純粋なページツーページナビゲーションである場合は、実際に実装する方が簡単です。しかし、 ''は一般的にナビゲーションだけでなく、他の多くの便利なものに使われています。 *その部分は些細なことではありません。 – BalusC

答えて

-1

<f:ajax>の属性は、1ventです。 ajax requestが正常終了した後に呼び出されるjavascript関数の名前をとります。したがって、ajax呼び出しの終了後に必要なURLにナビゲートするjs関数を追加することは可能です。次のようなものがあります。

 <h:commandLink id="testButton" 
         value="Test"> 
      <f:ajax event="action" 
        execute="@form" 
        render="@none" 
        listener="#{myBean.testButtonClickedHandler}" 
        onevent="navigate"/> 
     </h:commandLink> 

<script type="text/javascript"> 
    function navigate() { 
     window.location.href = "required url"; 
    } 
</script> 
関連する問題