Jsf 2 调整p:对话框大小后,如何在基本面中定位该对话框

Jsf 2 调整p:对话框大小后,如何在基本面中定位该对话框,jsf-2,primefaces,dialog,Jsf 2,Primefaces,Dialog,我有一个Prime Facesp:dialog,当打开(“显示”状态)时插入新组件时,该对话框的大小已经调整。然而,它的位置并没有改变,它的大小从左下角一直增加到页面底部 每次动态渲染新组件时,我都需要重新定位它。是否有任何JavaScript函数可以调用其小部件来重新定位 我将PrimeFaces 3.5与Mojarra 2.1.13一起使用。这是一种适用于您的情况的方法: Bean代码: @ManagedBean @ViewScoped public class Bean { pri

我有一个Prime Faces
p:dialog
,当打开(“显示”状态)时插入新组件时,该对话框的大小已经调整。然而,它的位置并没有改变,它的大小从左下角一直增加到页面底部

每次动态渲染新组件时,我都需要重新定位它。是否有任何JavaScript函数可以调用其小部件来重新定位


我将PrimeFaces 3.5与Mojarra 2.1.13一起使用。

这是一种适用于您的情况的方法:

Bean代码:

@ManagedBean
@ViewScoped
public class Bean
{
    private boolean visible;

    public void setVisible(boolean visible)
    {
         this.visible = visible;
    }

    public boolean getVisible()
    {
        return this.visible;
    }

    public void onBeforeShowDialog(AjaxBehaviorEvent event)
    {
        visible = true;
    }

    public void onBeforeHideDialog(AjaxBehaviorEvent event)
    {
        visible = false;
    }
}
查看代码:


内容
第二种方法也应该是JavaScript:

要添加到


功能中心和显示对话框(对话框)
{
$(dialog.css(“top”,Math.max(0,($(window.height()-$(dialog.outerHeight())/2)+$(window.scrollTop())+“px”);
$(dialog.css(“left”,Math.max(0,($(window.width()-$(dialog.outerWidth())/2)+$(window.scrollLeft())+“px”);
dialog.show();
}
查看代码:


内容

注意:因为我没有使用PrimeFaces,所以我还没有测试过这段代码,所以我希望它能很好地工作,但是想法就在这里

我也遇到过类似的情况,对话框中有一个选项卡视图。选项卡视图内容已动态加载

<p:dialog widgetVar="dialogWidgetVar">
    <p:tabView value="#{tabBean.tabs}" var="tabsVar"
            onTabShow="PF('dialogWidgetVar').initPosition();" dynamic="true">
        <p:tab id="Tab#{tabsVar.id}" title="#{tabsVar.name}">
            ...
        </p:tab>
    </p:tabView>
</p:dialog>

...
如您所见,每次更改选项卡时,它都会调用函数initPosition()。此函数将重新定位对话框。您可以在几种情况下使用此功能


  • 如果渲染完整的p:对话框,是否会产生影响?从逻辑上讲,它应该重新计算它的位置。我将
    dialogUpload
    添加到我的命令按钮的
    update
    属性中,在上传之后,它可以完美地重新定位对话框窗口。但是,更新操作正在关闭它,每次调用此命令按钮时,我都必须再次打开对话框;这很有帮助,非常感谢!