【发布时间】:2012-07-31 12:15:30
【问题描述】:
是否可以创建a4j:jsFunction,它将在我的托管 bean 中调用一个方法并从那里执行转发到另一个 jsf 页面?
提前致谢。
【问题讨论】:
是否可以创建a4j:jsFunction,它将在我的托管 bean 中调用一个方法并从那里执行转发到另一个 jsf 页面?
提前致谢。
【问题讨论】:
不,这是不可能的,因为<a4j:jsFunction> 将在 HTML 中创建一个可用的 javascript 方法,该方法通过 Ajax 与服务器通信。相反,你可以做一些丑陋的事情:
<h:form id="myForm">
<a4j:jsFunction name="myJSFunction" action="#{myBean.jsLogic}"
oncomplete="document.getElementById('myForm:btnForward').click();" />
<a4j:commandButton id="btnForward" style="display: none;"
action="#{myBean.doForward}" />
</h:form>
在这种情况下,在您的 js 函数结束时,您将调用可以进行导航的 <a4j:commandButton>(也可以是 <a4j:commandLink> 或任何其他 h 组件)的方法。
【讨论】:
嗯,它不是真正的转发,但你可以做一个重定向:
只要确定你在faces-config文件中对应的navigation-case有对应的标签即可:
<redirect />
那么在ajax调用之后浏览器会被重定向到指定的页面。
这对于 Luiggi 的响应有缺点,即进行两次服务器调用,一次是 ajax,然后是重定向。
作为一个优势,它使代码更简洁。
【讨论】: