来自托管bean的同步对话框调用

时间:2015-07-02 22:34:11

标签: jsf primefaces dialog requestcontext

有没有办法使用PrimeFaces RequestContext从托管bean调用JSF中定义的对话框,托管bean有一个表单但同步,这意味着托管bean等待其线程执行,直到用户提交形成的?

目前,我成功从托管bean调用对话框,但调用是异步的,这意味着对话框弹出,但托管bean线程继续,而不等待用户通过对话框提供所需的附加数据。 / p>

所以,在我的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
}
...

相关:

Prompting overlay for extra data by managed bean

Calling a JavaScript function from managed bean

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。 Primfaces的RequestContext只能完成他的工作,然后JSF生命周期继续,并将javascript信息( var regx_name = /^[A-Za-z0-9'\.\-\s\,:\/]$/; ,例如,做什么)发送回客户端(浏览器)。

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

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