我该如何发出一个Ajax请求来<h:dataTable>从javascript 更新?我当前正在使用加载初始数据,@Postconstruct但这会大大延迟初始页面加载。
<h:dataTable>
@Postconstruct
我正在考虑使用HTML标记onload事件<body>触发请求并更新数据表。
onload
<body>
从 理论上讲 ,应该执行以下操作。
<h:body> <f:ajax event="load" listener="#{bean.onload}" /> </h:body>
与
public void onload(AjaxBehaviourEvent event) { // ... }
但是,由于某些原因不支持此功能。
以下工作有效,但从本质上讲这是一个hack。
<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>withautoRun设置为true。
<p:remoteCommand>
autoRun
true
<h:body> <h:form> <p:remoteCommand name="onload" action="#{bean.onload}" autoRun="true" /> </h:form> </h:body>
或者,如果您使用的是OmniFaces,则可以使用它 <o:commandScript>
<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将通过新autorun属性消除此需求。
<h:outputScript target="body">
<script>
autorun
<h:body> <h:form> <o:commandScript name="onload" action="#{bean.onload}" autorun="true" /> </h:form> </h:body>