【发布时间】:2016-03-24 19:24:23
【问题描述】:
我正在使用 PrimeFaces 4。
我不想使用p:ajaxStatus,因为我只想显示几个组件的加载。
所以我有一个p:blockUI 组件,我通常会在 ajax 事件中通过这样做来显示:
onstart="loading.show();" oncomplete="loading.hide();"
但是对于p:wizard 组件,当用户更改选项卡(单击下一步/后退按钮或单击选项卡标题)时,我不知道该怎么做。我在向导中尝试了以下操作:
<p:wizard id="wizard" flowListener="#{myBean.onFlowProcess}" style="display: inline-block;" backLabel="Prev" nextLabel="Next" showNavBar="true" widgetVar="wizardWV">
<p:ajax event="tabChange" onstart="loading.show();" oncomplete="loading.hide();" />
<p:tab id="tab1" title="My tab 1">
<p:panel>
<h:outputLabel value="test" />
</p:panel>
</p:tab>
<p:tab id="tab2" title="My tab 2">
<p:panel>
<h:outputLabel value="test2" />
</p:panel>
</p:tab>
</p:wizard>
然后我得到了错误:
<p:ajax> Unable to attach <p:ajax> to non-ClientBehaviorHolder parent
有什么办法可以做到吗?
谢谢
【问题讨论】:
-
你能发布一些代码吗?很可能 p:ajax 不在正确的容器内,即 - 在向导中而不是 tabView。
-
@VeenarM 请检查我更新的代码。你在tabView中是什么意思?我应该使用 tabView 吗?谢谢!
-
在 p:wizard 上,他们有这 2 个功能 - onback,onnext 在 p:wizard 行上尝试它们 - 我不相信向导有 ajax 事件 tabChange(在 tabView 中)但是向导是一个来回的流程,你不需要使用 .hide() 我相信整个渲染框都重新完成了 - 但我有一段时间没有测试它了。 P.S 我有点困惑,afaik 向导中的选项卡不可选择,只有后退/下一步按钮?
-
@VeenarM 我试着只打电话给
.show(),但是在加载另一个选项卡后加载并没有隐藏。向导的选项卡是可点击的。谢谢 -
刚刚遇到了同样的问题。使用
onnext和onback属性来显示您的等待对话框(如 VeenarM 所述)。并在flowListener方法中使用PrimeFaces.executeScript()隐藏对话框。这绝对是一个 hack,但似乎是目前为向导组件获取自定义 AJAX 指示器的唯一解决方案。
标签: jsf jsf-2 primefaces