В теории следующее должно сделать это.
<h:body>
<f:ajax event="load" listener="#{bean.onload}" />
</h:body>
с
public void onload(AjaxBehaviourEvent event) {
// ...
}
Однако по некоторым причинам это не поддерживается. Я когда-либо публиковал отчет о проблеме об этом.
Следующее работает, но по сути это взлом.
<h:head>
<title>JSF 2.0 onload hack</title>
<script>
window.onload = function() {
document.getElementById('hidden:link').onclick();
}
</script>
</h:head>
<h:body>
<h:form id="hidden" style="display:none">
<h:commandLink id="link">
<f:ajax event="click" listener="#{bean.onload}" />
</h:commandLink>
</h:form>
</h:body>
Если вы используете PrimeFaces, вы можете использовать его <p:remoteCommand>
с autoRun
, установленным на true
.
<h:body>
<h:form>
<p:remoteCommand name="onload" action="#{bean.onload}" autoRun="true" />
</h:form>
</h:body>
Или, если вы используете OmniFaces, вы можете использовать его <o:commandScript>
<h:body>
<h:form>
<o:commandScript name="onload" action="#{bean.onload}" />
<h:outputScript target="body">onload()</h:outputScript>
</h:form>
</h:body>
<h:outputScript target="body">
отображает <script>
в конце <body>
. Предстоящий OmniFaces 2.2 устранит эту потребность с помощью атрибута new autorun
.
<h:body>
<h:form>
<o:commandScript name="onload" action="#{bean.onload}" autorun="true" />
</h:form>
</h:body>