使用JSF ajax请求刷新URL

时间:2012-09-22 18:12:56

标签: javascript ajax jsf-2 browser-history

我正在使用JSF 2和PrettyFaces以及<h:link><f:param>标签来获取可收藏的页面(最终忘记JSF应用程序中的所有POST请求真的很棒。)

但是,其中一些链接只会改变页面的一小部分(主要是当用户停留在同一视图中时),因此发送ajax请求会更好。但是,<f:ajax>不能与<h:link>一起使用,只能<h:commandlink>。我也可以使用commandlink以多种方式发送参数,但在这种情况下,URL在请求后保持不变。因此它与页面内容不同步,并且不可刷新。

我见过使用链接的网站发送GET和ajax请求的混合物(在用ajax修改页面时指向一个新的URL),但到目前为止我还没有找到任何解决方案。

在ajax请求完成后(或用户点击时),我可以用jsf以某种方式刷新url吗?或者我是否必须使用一些外部JS库?

编辑:这里需要的JS库是新的JavaScript History API。 More info. 我猜JSF目前不使用这个API。但是从JSF开发人员的角度来看,我仍然对这个问题很感兴趣。

此外,它是否计划在未来发布JSF?将<f:ajax><h:link>结合起来将是一个完美的解决方案。

1 个答案:

答案 0 :(得分:-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>