【发布时间】:2014-02-24 01:32:44
【问题描述】:
我有一个页面在加载时必须触发 AJAX 请求。单击页面上的按钮时,我设法执行了请求。但是我还没有设法在页面加载时自动触发它。要使用的参数来自另一个页面,通过 f:viewParam。
我已经尝试使用加载事件,根据thread,它似乎可用于 f:ajax 和 HTMLGraphicImage 或 HTMLBody,但它不适用于 a4j:ajax(或者我可能遗漏了一些东西)。
Tag Exception
<a4j:ajax> loadevent is not supported for the HtmlGraphicImage
为了简单起见,我没有发布 bean,因为这部分现在可以按我的意愿工作。我的问题是关于触发 a4j:ajax 标签。如果您认为也需要 bean,请告诉我。
我认为有一种方法可以通过 PrimeFaces 来实现。我不确定我是否会被允许将此库添加到项目中,所以如果有任何解决方案,请发布其他解决方案。
这里是 JSF 页面。这个尝试使用图像加载事件来触发 AJAX。也有使用 HTMLBody 的尝试,但它被标记为 ui:remove:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:a4j="http://richfaces.org/a4j">
<ui:composition template="layouts/template.jsf">
<ui:define name="body">
<f:metadata>
<f:viewParam name="recordCode"
value="#{recordDetailBean.record.recordCode}" />
</f:metadata>
<h:graphicImage value="/images/transparent.gif">
<a4j:ajax event="load"
action="#{recordDetailBean.createDummyDelay}"
status="loadingRecordDetail" render="recordDetail" />
</h:graphicImage>
<ui:remove>
<a4j:ajax event="load"
action="#{recordDetailBean.createDummyDelay}"
status="loadingRecordDetail" render="recordDetail" />
</ui:remove>
<rich:popupPanel id="loadRecord" style="text-align:center"
autosized="true" modal="true" width="200">
<h:graphicImage value="/images/ajax-loader.gif" />
<br />
<h:outputText value="#{msg.loadingRecord}" />
</rich:popupPanel>
<a4j:status name="loadingRecordDetail">
<f:facet name="start">
<rich:componentControl event="start" operation="show"
target="loadRecord" />
</f:facet>
<f:facet name="stop">
<rich:componentControl event="stop" operation="hide"
target="loadRecord" />
</f:facet>
</a4j:status>
<h:form>
<a4j:commandButton value="Do something"
action="#{recordDetailBean.createDummyDelay}"
status="loadingRecordDetail" render="recordDetail" />
<a4j:outputPanel id="recordDetail">
<h:outputText value="#{recordDetailBean.dummyDelay}" />
</a4j:outputPanel>
</h:form>
</ui:define>
</ui:composition>
</html>
提前致谢。
【问题讨论】:
-
在 primefaces 中,我们有 p:remoteCommand(相当于 Richfaces 中的 a4j:jsFunction)和 autoRun 属性。如果它设置为 true,那么它将在 onload 时执行。不确定richfaces中的相似属性
-
我很快会询问我的经理关于将 PrimeFaces 添加到项目中的问题,但如果有的话,我也想知道另一种方法。感谢您的帮助,Srikanth。
-
试试这样
callOnload(); 并用 name="callOnload" 声明 a4j:jsFunction 以及您要执行的相应操作。希望这可以达到您的目的 -
Srikanth,我尝试了您的方法,但无法正常工作。我可能错过了什么。无论如何感谢您的帮助!