1

問題:
i)在JSF2應用程序,我想用一個標籤控件,當用戶點擊一個選項卡上,其中,創建一個頁面,該面板的內容如下通過ajax調用從服務器中的xhtml文件加載。
ii)我希望這可以支持正常的降級(當Javascript被禁用時),這樣一旦點擊該選項卡,就會觸發一個HTTP請求,並加載一個新頁面......或者通過漸進式增強來加載新頁面。
阿賈克斯回退時禁用JavaScript

部分解決方案: 我)我想我可以通過張貼BalusC的代碼示例中How to ajax jsf 2 outputLink
做到這一點: -

<h:form> 
<f:ajax render=":include"> 
    <h:commandLink value="Home" action="#{menuManager.setPage('home')}" /><br /> 
    <h:commandLink value="FAQ" action="#{menuManager.setPage('faq')}" /><br /> 
    <h:commandLink value="Contact" action="#{menuManager.setPage('contact')}" /><br /> 
</f:ajax> 

</h:form> 
<h:panelGroup id="include"> 
    <ui:include src="#{menuManager.page}.xhtml" /> 
</h:panelGroup> 

問題
如何延長這一解決問題(ii)或者還有其他完全不同的方法嗎?我認爲也許我可以用無腳本來實現這一點,但無法弄清楚如何!

編輯:可能的解決方法 - 尚未驗證
上面的代碼應該工作,即使AJAX是禁用;它應該只是通過HTTP工作,根據http://www.laliluna.de/articles/posts/jsf-2-evaluation-test.html :)
優雅!我會嘗試一下。

+0

什麼?你有禁用JavaScript的用戶?我寧願升級用戶... – greyfairer 2012-01-03 20:30:23

+0

您確定要投入大量的時間和精力來處理瀏覽器禁用javascript的用戶嗎?根據[這個雅虎研究](http://developer.yahoo.com/blogs/ydn/posts/2010/10/how-many-users-have-javascript-disabled/),這約爲1%。我只是在說'。 – DOK 2012-01-03 20:31:26

+1

我需要支持各種各樣的用戶,以及小屏幕設備(其中許多還缺少js)。我不打算花費太多精力(重定向到我的應用程序的不同版本等),並儘可能地通過代碼重用來做到這一點。因此我的問題。 :) – Nilesh 2012-01-03 20:35:29

回答

2

如果您使用<h:commandButton>而不是<h:commandLink>,那麼當JS被禁用時,它將工作得很好。無論如何,命令鏈接都需要JS才能提交一個「隱藏」的POST表單,不管它是否已被Ajax化。如有必要,可以使用CSS來使命令按鈕看起來像鏈接(例如移除邊框,背景,插入等)。

作爲一個完全不同的替代方案中,使它們通過使用<h:outputLink><h:link>與頁面作爲一個請求參數或PATHINFO無論如何GET請求,並使用jQuery.load()代替不顯眼地獲得包括頁面,提取相關的部分,幷包括在HTML DOM樹。

+0

不錯!我明白了.. – Nilesh 2012-01-04 05:05:21