这里存在概念性思维错误。只要未加载带有图像的页面,就无法显示图像(无论该图像代表什么都与问题无关)。为了显示图像,您需要先确保包含图像的页面已完全加载。只有当带有图像的页面完全加载时,您才能调用所需的业务操作。
<f:viewAction>
不适合这个。常见的方法是让 JavaScript 在<body>
到达结束时、在文档准备/完成事件期间或在窗口加载事件期间触发服务器端操作。确切的答案实际上取决于您手头的库。当您手头有 PrimeFaces 和/或 jQuery 时,代码可以被疯狂地简化。
让我们假设“plain vanilla” 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"
将被重新定位到末尾并调用隐藏的 ajax 命令按钮。<body>
也可以看看: