我正在将JSF 2与PrettyFaces以及<h:link><f:param>标记一起广泛使用以获得可加书签的页面(很高兴最终忘记了JSF应用程序中的所有那些POST请求)。

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

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

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

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

另外,是否计划在将来的JSF版本中使用?结合<f:ajax><h:link>将是一个完美的解决方案。

最佳答案

<f:ajax>在事件上具有属性。它使用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>

关于javascript - 用JSF ajax请求刷新URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12546438/

10-12 12:54
查看更多