2013-05-15 31 views
5

我有一個在打開時插入新組件('show'狀態)時已調整大小的Prime Faces p:dialog。然而,它的位置並沒有改變,它的大小從左下角直到頁底。如何在調整大小後在Prime Faces中放置p:對話框

我每次動態呈現新組件時都需要重新定位它。有沒有JavaScript函數可以調用它的小部件來重新定位?

我使用PrimeFaces 3.5和Mojarra 2.1.13。

+0

如果渲染完整號碼:對話,這有區別嗎?從邏輯上講,它應該重新計算它的位置。 –

+0

我在我的命令按鈕的'update'屬性中添加了'dialogUpload',並且在上傳完成後重新定位對話窗口。但是,更新操作正在關閉它,並且每次調用此命令按鈕時都必須再次打開該對話框。 –

回答

5

這是應該在你的情況下,工作的方法:

豆代碼:

@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; 
    } 
} 

查看代碼:

<h:commandButton value="Show dialog"> 
    <f:ajax listener="#{bean.onBeforeShowDialog}" render="dialog" /> 
</h:commandButton> 

<p:dialog id="dialog" visible="#{bean.visible}"> 
    content 

    <h:commandButton value="Hide dialog"> 
     <f:ajax listener="#{bean.onBeforeHideDialog}" render="dialog" /> 
    </h:commandButton> 
</p:dialog> 

第二種方法也應努力是JavaScript:

<h:head />添加:

<h:outputScript library="primefaces" name="jquery/jquery.js" /> 

<script> 
    function centerAndShowDialog(dialog) 
    { 
     $(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(); 
    } 
</script> 

查看代碼:

<p:commandButton id="basic" value="Show Dialog" onclick="centerAndShowDialog(dlg);" type="button" /> 

<p:dialog id="dialog" header="Dynamic Dialog" widgetVar="dlg" dynamic="true"> 
    Content 
</p:dialog> 

注:因爲我沒有使用PrimeFaces,我沒有測試這個代碼,所以我希望它工作得很好,但想法就在這裏!

+0

而不是$(對話框)使用dialog.jq,例如:dialog.jq.css(「top」,...); – Hubert

+0

大聲笑,這是一個無關緊要和令人反感的問題。你真的必須爲你的善良人工作。回到不同的是,我已經在發佈之前使用PrimeFaces 3.5進行了測試。謝謝。 – Hubert

+0

我在重新定位對話框時遇到了類似的問題。我用dialogWidgetVar.initPosition();正如本文所描述的那樣。 http://forum.primefaces.org/viewtopic.php?f=3&t=16893。你可以在Ajax Request中或者在我的情況下在tabView中使用它。 – kdoteu

13

我有一個類似的情況與對話框中的TabView。 TabView內容是動態加載的。

<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> 

正如您所看到的,它會在每次更改Tab時調用函數initPosition()。該功能將重新定位您的對話框。您可以在幾種情況下使用此功能。

  1. http://forum.primefaces.org/viewtopic.php?f=3&t=16893
+0

很高興知道:) – djmj

相關問題