类似于f viewaction中的f ajax



当执行f:viewaction时,我需要在执行请求时显示加载图像,这听起来就像把f:ajax放在f:viewaction中一样,但这是不可能的。

<ui:define name="metadata">
<f:metadata>
<f:viewAction
action="#{subscriptionManagementMB.loadSubscriptionManagement()}" />
</f:metadata>
</ui:define>

这里有一个概念性思维错误。只要没有加载带有图像的页面,就不能显示图像(该图像所代表的内容与问题无关)。为了显示图像,您需要确保首先已完全加载带有图像的页面。只有当带有图像的页面完全加载时,然后才能调用所需的业务操作。

<f:viewAction>对此不适用。常见的方法是,当<body>结束时,或者在文档准备/完成事件期间,或者在窗口加载事件期间,让JavaScript触发服务器端操作。确切的答案实际上取决于你手头的图书馆。当你手头有PrimeFaces和/或jQuery时,代码可以被疯狂地简化。

让我们假设";普通香草";JSF/JS,这里有一种实现需求的方法:

<h:body>
<h:panelGroup id="content">
<h:graphicImage name="loading.gif" rendered="#{not bean.loaded}" />
<ui:fragment rendered="#{bean.loaded}">
... (put your content here)
</ui:fragment>
</h:panelGroup>
<h:form id="form" style="display:none;">
<h:commandButton id="button" action="#{bean.onload}">
<f:ajax render=":content" />
</h:commandButton>
</h:form>
<h:outputScript target="body">
document.getElementById("form:button").onclick();
</h:outputScript>
</h:body>

该图像显示加载图像。该表单使用CSSdisplay:none隐藏,包含一个用于更新内容的ajax命令按钮。带有target="body"的脚本将被重新定位到<body>的末尾,并在加载页面时调用隐藏的ajax命令按钮。

另请参阅:

  • 如何使用本地JavaScript在HTMLDOM事件上调用JSF管理的bean

相关内容

  • 没有找到相关文章

最新更新