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