2012-09-22 66 views
7

我將PrettyFaces與JSF 2以及<h:link><f:param>標籤廣泛地用於獲取可加入書籤的頁面(最好忘記JSF應用程序中的所有POST請求)。使用JSF ajax請求刷新URL

但是,其中一些鏈接僅改變頁面的一小部分(主要是當用戶停留在同一視圖中時),因此改爲發送一個jax請求更好。但是,<f:ajax>不能與<h:link>一起使用,只能使用<h:commandlink>。我可以通過一個命令鏈接以多種方式發送參數,但在這種情況下,請求後URL保持不變。因此它與頁面內容不同步,並且不可刷新。

我見過使用鏈接發送GET和ajax請求混合的鏈接(指向一個新的url,同時用ajax修改頁面),但到目前爲止我還沒有找到任何解決方案。

ajax請求完成後(或當用戶點擊)後,我可以用jsf刷新url嗎?或者我必須使用一些外部JS庫?

編輯:這裏需要的JS庫是新的JavaScript歷史API。 More info. 我猜JSF目前不使用這個API。但是我仍然從JSF開發人員的角度對這個問題感興趣。

此外,計劃將來的JSF版本?結合<f:ajax><h:link>將是一個完美的解決方案。

+0

我在幾個月前就看過OmniFaces。這不幸並不便宜/不重要。完全相同的更改URL應該能夠完全返回所需的JSF視圖狀態,包括所有ajax更改,這些更改由單個簡單GET請求的回發執行。以應用程序範圍(會話無關)的方式實現此目的的所有必要信息都使GET URL非常冗長。有很多方法可以縮短網址,但仍然...然後我沒有考慮到組件庫的細節。 – BalusC

+0

謝謝你的迴應。不過,我並不完全瞭解它。我認爲應該由開發者負責設置一個URL,在刷新時給出完全相同的頁面 - 視圖應該處理請求屬性等。實際上,我已經這樣做了,因爲''生成一個非ajax GET鏈接 - 我都希望發送一個ajax請求,並將URL設置爲之前由''生成的URL。它可以是''或其他任何東西,重點是它應該像這樣工作。 – apcuk

+0

如果目的是純粹的頁面到頁面導航,那麼它確實會更容易實現。但是''通常被用於許多其他更有用的東西,而不僅僅是導航。 *那部分不是微不足道的。 – BalusC

回答

-1

<f:ajax>有屬性onevent。它取名爲javascript函數,將在ajax request成功完成後調用。所以有可能添加js函數,它會在ajax調用完成後導航到所需的url。例如:

 <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>