禁用Javascript时的Ajax回退

禁用Javascript时的Ajax回退,javascript,ajax,jsf-2,progressive-enhancement,graceful-degradation,Javascript,Ajax,Jsf 2,Progressive Enhancement,Graceful Degradation,问题: i) 在JSF2应用程序中,我想创建一个带有选项卡控件的页面,当用户单击选项卡时,下面面板的内容通过ajax调用从服务器中的xhtml文件加载。 ii)我希望它支持优雅的降级(当Javascript被禁用时),以便在单击选项卡时,触发HTTP请求并加载新页面……或者反过来,通过渐进增强。 部分解决方案: i) 我想我可以通过BalusC在中发布的代码示例来实现这一点:- 问题 我如何扩展它来解决问题(ii),或者有其他完全不同的方法吗?我想也许我可以用noscript实现这一点

问题:
i) 在JSF2应用程序中,我想创建一个带有选项卡控件的页面,当用户单击选项卡时,下面面板的内容通过ajax调用从服务器中的xhtml文件加载。
ii)我希望它支持优雅的降级(当Javascript被禁用时),以便在单击选项卡时,触发HTTP请求并加载新页面……或者反过来,通过渐进增强。

部分解决方案: i) 我想我可以通过BalusC在
中发布的代码示例来实现这一点:-





问题
我如何扩展它来解决问题(ii),或者有其他完全不同的方法吗?我想也许我可以用noscript实现这一点,但我不知道如何实现

编辑:可能的解决方案-尚待验证:
即使禁用了ajax,上述代码也应该可以工作;它应该只通过HTTP工作,根据:)
优雅的我会试试看。

如果您使用
而不是
,那么当禁用JS时,它就可以正常工作了。命令链接无论如何都需要JS才能提交一个“隐藏”的帖子表单,不管是否ajaxified。如有必要,您可以加入一些CSS,使命令按钮看起来像链接(例如,删除边框、背景、插图等)


另一种完全不同的方法是,使用
将页面作为请求参数或pathinfo,并使用
jQuery.load()
来获取请求,而不是悄悄地获取包含页面,提取相关部分并包含在HTML DOM树中。

什么?您有禁用Javascript的用户吗?我宁愿升级用户…你确定要投入大量时间和精力来处理浏览器禁用javascript的用户吗?据统计,这大约是1%。我只是说,我需要支持范围广泛的用户,还有那些在小屏幕设备上的用户(其中很多设备都没有js)。我不会费心在这方面投入太多精力(重定向到我的应用程序的不同版本等等),并通过代码重用尽可能多地做。因此,我的问题是:
<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>