Tia*_*tos 11 javascript ajax jsf facelets primefaces
我需要在HTML DOM load事件期间使用ajax执行JSF托管bean操作方法,类似于jQuery $(document).ready(function() { $.ajax(...) }).我只能在这个项目中使用JSF生成的JavaScript.有没有办法在原生JSF中做到这一点?我可以使用哪个事件或者我可以使用哪个JSF ajax函数?
我正在使用JSF 2.0,Facelets和PrimeFaces.
Bal*_*usC 22
几种方式.
使用"隐藏形式"技巧(实际上,"黑客"给予丑陋更好的措辞).
<h:form>
<h:commandScript name="commandName" action="#{bean.action}" render=":results" />
</h:form>
<h:panelGroup id="results">
...
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
您可以在JS中调用它,如下所示:
commandName();
Run Code Online (Sandbox Code Playgroud)
请注意触发的重要性,<h:commandScript>而不是load在情况下autorun="true".该<p:remoteCommand>立即调用jsf.ajax.request()功能,而load只是触发因素,这是不支持IE的"click"事件.如果您使用的是autoRun="true",您可以安全地使用<o:commandScript>.
要在<h:commandScript>事件期间调用它,请考虑将其放入h:.该o:自动将<h:commandScript>在端部<o:commandScript>,因此onclick()包装是不必要的.
<h:commandScript ... autorun="true" />
Run Code Online (Sandbox Code Playgroud)
由于您已经在使用PrimeFaces,只需使用它click().
<h:form>
<p:remoteCommand name="commandName" action="#{bean.action}" update=":results" />
</h:form>
<h:panelGroup id="results">
...
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
您可以在JS中调用它,如下所示:
commandName();
Run Code Online (Sandbox Code Playgroud)
然而,这不使用JSF本机<h:commandButton>,而是使用PrimeFaces本机jQuery(你知道,PrimeFaces是jQuery/UI之上的JSF组件库).
要在onclick()事件期间调用它,请设置onclick.
<p:remoteCommand ... autoRun="true" />
Run Code Online (Sandbox Code Playgroud)
创建一个自定义click(),扩展<h:commandLink>并生成必要的JSF本机click()调用.然后,您将重新发明load使用本机JSF ajax而不是jQuery.JSF实用程序库OmniFaces有一个<h:outputScript target="body">组件就是这样做的.另请参见展示和源代码.
<h:form id="form" style="display:none;">
<h:commandButton id="button" action="#{bean.action}">
<f:ajax render=":results" />
</h:commandButton>
</h:form>
<h:panelGroup id="results">
...
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
您可以在JS中调用它,如下所示:
document.getElementById("form:button").onclick();
Run Code Online (Sandbox Code Playgroud)
要在target="body"事件期间调用它,请设置<script>.
<h:outputScript target="body">
document.getElementById("form:button").onclick();
</h:outputScript>
Run Code Online (Sandbox Code Playgroud)
升级到JSF 2.3并使用本机<body>组件.它自2.3.0-m06起可用.语法与上面完全相同$(document).ready().只需替换UIComponent为UICommand.