阿贾克斯回退时禁用JavaScript

阿贾克斯回退时禁用JavaScript

问题描述:

问题:
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

如果您使用<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