JavaScript中延迟调用p:remoteCommand无响应 执行失败原因咨询
问题排查解决步骤
- 第一步:确认
<p:remoteCommand>组件外层是否包裹了<h:form>标签
PrimeFaces的所有ajax交互组件都必须放在JSF表单内才能正常生成可用的JS调用方法、发起后台请求,你当前贴出的代码片段缺失外层form标签,这是最常见的失效原因。 - 第二步:修正服务端方法绑定属性
你的delayTime()是无参方法,不要用actionListener属性,改用action属性即可,actionListener要求绑定的方法必须接收javax.faces.event.ActionEvent类型的入参,否则调用会后台报错、前端无响应。修改后的组件代码如下:<p:remoteCommand name="remoteCommandName" action="#{uploadManagedBean.delayTime()}" /> - 第三步:排查组件渲染状态
按F12打开浏览器开发者工具的控制台,触发按钮点击后等待3秒,检查是否有remoteCommandName is not defined的报错:- 如果有报错,说明
<p:remoteCommand>没有成功渲染到前端页面,检查父组件是否设置了rendered="false"、项目是否正确引入PrimeFaces依赖 - 如果没有报错,检查后台日志是否有方法调用异常,排查
delayTime()内部是否有报错逻辑
- 如果有报错,说明
关于你补充的
onStart属性问题说明:onStart是客户端回调属性,仅接受JS代码片段,你直接在该属性里写EL表达式时,页面渲染阶段服务端就会直接执行EL对应的方法拿返回值,所以会出现页面加载就自动调用delayTime()的情况,该属性不能用来绑定服务端方法,不要混用客户端和服务端属性。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

