有没有一种方法可以使用PrimeFaces RequestContext
从托管bean调用JSF中定义的对话框,托管bean有一个表单,但是同步的,这意味着托管bean等待其线程执行,直到用户提交表单?
目前,我成功地从我的托管bean调用了一个对话框,但调用是异步的,这意味着对话框被弹出打开,但托管bean线程继续运行,而无需等待用户通过对话框提供所需的额外数据。
因此,在我的JSF中,我定义了如下对话框:
<p:dialog header="My Dialog" widgetVar="myDialog" modal="false" height="100">
<h:form>
<h:outputLabel for="inputData" value="Input Data:"/>
<p:inputText id="inputData" title="Input Data"
maxlength="16" required="true" ... >
</p:inputText>
<h:commandButton value="Submit"/>
</h:form>
</p:dialog>
在我的托管bean中,如果满足一些条件,我会有条件地调用对话框:
...
if(noteReqd) {
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.execute("PF('myDialog').show();");
//here I want the managed bean to stop until the user supplies the extra data needed
//but it just proceeds downstream without the data the user enters
}
...
相关:
托管bean 提示覆盖额外数据
从托管bean 调用JavaScript函数
不,这是不可能的。Primfaces的RequestContext只能完成他的工作,然后JSF生命周期继续,并将javascript信息(PF('myDialog').show();
,例如,要做什么(发送回客户端(浏览器(。
一个解决方案是以某种方式改变你的逻辑。
- 用户提供了一些数据
- 检查数据是否足够
- 如果没有,请重新打开相同的表单(或另一个(
- 执行步骤2+3,直到提供足够的数据
- 继续你的逻辑