f viewaction 中的 f ajax 之类的东西?
Something like f ajax within f viewaction?
我需要在执行 f:viewaction
时在执行请求时显示加载图像,这听起来像是将 f:ajax
放在 f:viewaction
中,但这是不可能的。
<ui:define name="metadata">
<f:metadata>
<f:viewAction
action="#{subscriptionManagementMB.loadSubscriptionManagement()}" />
</f:metadata>
</ui:define>
这里有一个概念性思维错误。只要未加载带有图像的页面,您就无法显示图像(无论该图像代表什么与问题无关)。为了显示图像,您需要确保首先完全加载带有图像的页面。只有当包含图像的页面完全加载后,然后您才能调用所需的业务操作。
<f:viewAction>
不适合这个。常见的方法是让 JavaScript 在到达 <body>
末尾时,或在文档 ready/complete 事件期间,或在 window 加载事件期间触发服务器端操作。确切的答案实际上取决于您手头的库。当您手头有 PrimeFaces and/or jQuery 时,代码可以大大简化。
让我们假设“普通香草”JSF/JS,这里有一个如何实现要求的 hacky 方法:
<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>
图片为加载图片。使用 CSS display:none
隐藏的表单包含更新内容的 ajax 命令按钮。 target="body"
的脚本将被重新定位到 <body>
的末尾,并在页面加载时调用隐藏的 ajax 命令按钮。
另请参阅:
- How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?
我需要在执行 f:viewaction
时在执行请求时显示加载图像,这听起来像是将 f:ajax
放在 f:viewaction
中,但这是不可能的。
<ui:define name="metadata">
<f:metadata>
<f:viewAction
action="#{subscriptionManagementMB.loadSubscriptionManagement()}" />
</f:metadata>
</ui:define>
这里有一个概念性思维错误。只要未加载带有图像的页面,您就无法显示图像(无论该图像代表什么与问题无关)。为了显示图像,您需要确保首先完全加载带有图像的页面。只有当包含图像的页面完全加载后,然后您才能调用所需的业务操作。
<f:viewAction>
不适合这个。常见的方法是让 JavaScript 在到达 <body>
末尾时,或在文档 ready/complete 事件期间,或在 window 加载事件期间触发服务器端操作。确切的答案实际上取决于您手头的库。当您手头有 PrimeFaces and/or jQuery 时,代码可以大大简化。
让我们假设“普通香草”JSF/JS,这里有一个如何实现要求的 hacky 方法:
<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>
图片为加载图片。使用 CSS display:none
隐藏的表单包含更新内容的 ajax 命令按钮。 target="body"
的脚本将被重新定位到 <body>
的末尾,并在页面加载时调用隐藏的 ajax 命令按钮。
另请参阅:
- How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?