Far*_*san 28 javascript java jsf jsf-2
如何创建一个更新<h:dataTable>
javascript 的ajax请求?我目前正在使用初始数据加载,@Postconstruct
但这显着延迟了初始页面加载.
我正在考虑使用HTML标记onload
事件<body>
来触发请求并更新数据表.
Bal*_*usC 58
在理论上下面应该这样做.
<h:body>
<f:ajax event="load" listener="#{bean.onload}" />
</h:body>
Run Code Online (Sandbox Code Playgroud)
同
public void onload(AjaxBehaviourEvent event) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,由于某些原因,不支持此功能.我曾经发布了一份关于这个的问题报告.
以下作品,但它本质上是一个黑客.
<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>
Run Code Online (Sandbox Code Playgroud)
如果您碰巧使用PrimeFaces,那么您可以将其<p:remoteCommand>
与autoRun
set一起使用true
.
<h:body>
<h:form>
<p:remoteCommand name="onload" action="#{bean.onload}" autoRun="true" />
</h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)
或者,如果您正在使用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>
Run Code Online (Sandbox Code Playgroud)
最终<h:outputScript target="body">
渲染<script>
了<body>
.即将推出的OmniFaces 2.2将通过新autorun
属性消除这种需求.
<h:body>
<h:form>
<o:commandScript name="onload" action="#{bean.onload}" autorun="true" />
</h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54061 次 |
最近记录: |