我正在将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/