-->

从托管bean同步对话框调用(Synchronous dialog invocation from

2019-10-23 15:06发布

有没有办法使用PrimeFaces方式RequestContext调用从托管bean,它有一个形式在JSF中定义的对话框,但是同步,这意味着直到用户提交表单管理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函数

Answer 1:

不,这是不可能的。 该Primfaces的RequestContext的只能做他的工作,然后JSF生命周期继续,并发送JavaScript的信息( PF('myDialog').show();例如,怎样做)返回给客户端(浏览器)。

一种解决方案来改变你的逻辑以某种方式。

  1. 用户提供了一些数据
  2. 检查数据是否足够
  3. 如果不是,重新打开相同的形式(或另一个)
  4. 执行步骤2 + 3,直到足够的数据被提供
  5. 继续你的逻辑


文章来源: Synchronous dialog invocation from managed bean