Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在commandButton onclick bootsfaces jsf中执行两个AJAX调用_Ajax_Jsf_Bootsfaces - Fatal编程技术网

在commandButton onclick bootsfaces jsf中执行两个AJAX调用

在commandButton onclick bootsfaces jsf中执行两个AJAX调用,ajax,jsf,bootsfaces,Ajax,Jsf,Bootsfaces,我有一个带有表单的模态,我想要的是首先从bean关闭模态(方法“cerrarModal”),然后执行在数据库中插入的AJAX(方法“crearUsuario”)。我看到了,但对我不起作用

我有一个带有表单的模态,我想要的是首先从bean关闭模态(方法“cerrarModal”),然后执行在数据库中插入的AJAX(方法“crearUsuario”)。我看到了,但对我不起作用<这是我的按钮:

<b:commandButton value="Guardar" ajax="true" 
                 update="formTblUsuarios:growlMsg formTblUsuarios:tblUsuarios rowModal" 
                 id="btnGuardarUsuario" look="primary" 
                 onclick="ajax:admUsuariosBean.cerrarModal();admUsuariosBean.crearUsuario()" />
但服务器抛出此错误:

abr 042018 11:02:14 AM com.sun.faces.lifecycle.InvokeApplicationPhase执行 ADVERTENCIA:未能分析表达式[#{admusuarisbean.cerrarModal();admusuarisbean.crearUsuario()}] javax.el.ELException:未能分析表达式[#{admusuarisbean.cerrarModal();admusuarisbean.crearUsuario()}] 位于org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:145) 位于org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:171) 位于org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:216) 位于org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:66) 在net.bootsfaces.component.ajax.AJAXBroadcastComponent.evalAsValueExpression(AJAXBroadcastComponent.java:74)中 在net.bootsfaces.component.ajax.AJAXBroadcastComponent.executeAjaxCalls(AJAXBroadcastComponent.java:123)中 在net.bootsfaces.component.ajax.AJAXBroadcastComponent.broadcast(AJAXBroadcastComponent.java:52) 位于javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 位于javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 位于com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 位于com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 在com.sun.faces.lifecycle.LifecycleImpl.execute上(LifecycleImpl.java:198) 位于javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 位于com.abcpagos.otis.beans.Filtro.doFilter(Filtro.java:44) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 位于org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 位于org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 运行(Thread.java:748) 原因:org.apache.el.parser.ParseException:遇到“”;“”在第1行第32列。 我期待的是: "}" ... "." ... "[" ... ">" ... “gt”。。。 "=" ... “ge”。。。 "

我使用的是BootsFaces 1.2.0,PrimeFaces 6.1,JSF 2.2,(XAMPP)Apache Tomcat 7.0.56。
谢谢。

您不需要bean来关闭模式表单

<b:commandButton value="Guardar" ajax="true" 
             update="formTblUsuarios:growlMsg formTblUsuarios:tblUsuarios rowModal" 
             id="btnGuardarUsuario" look="primary" 
             actionListener="#{admUsuariosBean.crearUsuario()}"
             oncomplete="$('#usuarioModal').modal('hide')"
 />

首先,@Holger的答案(大部分)是正确的:您的特定用例不需要AJAX调用。但是,有些用例需要两个连续的AJAX调用,所以我还是要问您最初的问题

我以一种非常简单的方式实现了BootsFaces解析器。
onclick
处理程序可能由三部分组成:在AJAX调用之前执行的JavaScript部分、AJAX调用,以及在向服务器发送AJAX请求之后执行的第二个JavaScript部分。请注意,第二个JavaScript位几乎肯定是exe在Java代码之前剪切

理论上,我可以在实现AJAX引擎时考虑多个AJAX调用。但是,我没有看到这样做的意义:调用两个方法的Java方法比触发两个AJAX调用更容易,每个调用一个Java方法,每个更新DOM

但是……永远不要说永远。如果你真的需要两个连续的AJAX调用,你可以使用
来实现。这样的
是一个JavaScript函数,它通过AJAX调用Java方法并更新DOM。因此你可以调用
onComplete
处理程序中的
来触发第二个AJAX请求

就是这样。但是,您只需要关闭模式,所以我建议您这样实现:

<b:commandButton value="Guardar"
         update="..." 
         onclick="$('#usuarioModal').modal('hide');ajax:admUsuariosBean.crearUsuario()" />


谢谢mate,但我需要的是先关闭模式,然后再执行bean方法。Oncomplete事件在ajax调用完成时执行,这意味着在bean方法完成之前,模式将始终处于打开状态,我需要的是其他状态。大多数人希望在一切正常的情况下关闭模式。因此,在大多数情况下霍尔格是必经之路(可能由
<b:commandButton value="Guardar"
         update="..." 
         onclick="$('#usuarioModal').modal('hide');ajax:admUsuariosBean.crearUsuario()" />