禁用 Javascript 时的 Ajax 回退



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

部分解决方案:i( 我想我可以通过 BalusC 在如何 ajax jsf 2 输出
链接中发布的代码示例来实现这一点:-

<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(或者还有其他完全不同的方法吗?我想也许我可以用noscript来实现这一点,但不知道如何实现!

编辑:可能的解决方案 - 尚未验证
即使禁用了 ajax,上面的代码也应该可以工作;根据 http://www.laliluna.de/articles/posts/jsf-2-evaluation-test.html :)
,它应该只通过HTTP工作优雅!我会尝试一下。

如果您使用 <h:commandButton> 而不是 <h:commandLink> ,那么当禁用 JS 时它会正常工作。命令链接无论如何都需要JS才能提交"隐藏"的POST表单,无论是否ajaxized。如有必要,您可以添加一些CSS以使命令按钮看起来像链接(例如删除边框,背景,插图等(。

作为完全不同的替代方案,通过使用<h:outputLink><h:link>页面作为请求参数或pathinfo,无论如何都要使它们成为GET请求,并使用jQuery.load()来不显眼地获取包含页面,提取相关部分并包含在HTML DOM树中。

相关内容

  • 没有找到相关文章

最新更新