2013-05-15 30 views
5

Tôi có Mặt Thủ tướng p:dialog đã được thay đổi kích cỡ trong khi các thành phần mới được chèn khi mở (trạng thái 'hiển thị'). Tuy nhiên vị trí của nó không thay đổi và kích thước của nó đang tăng từ góc dưới bên trái cho đến cuối trang.Cách định vị hộp thoại p: trong Mặt Prime sau khi đổi kích thước

Tôi cần đặt lại vị trí mỗi lần tôi hiển thị động các thành phần mới. Có chức năng JavaScript nào tôi có thể gọi cho tiện ích con của nó để định vị lại không?

Tôi đang sử dụng PrimeFaces 3.5 với Mojarra 2.1.13.

+0

Nếu bạn làm cho p hoàn chỉnh: thoại, nó tạo sự khác biệt? Về mặt logic nó nên tính toán lại vị trí của nó. –

+0

Tôi đã thêm 'dialogUpload' vào thuộc tính' update' của nút lệnh và sau khi tải lên, nó định vị lại cửa sổ hộp thoại một cách hoàn hảo. Tuy nhiên, hành động cập nhật là đóng nó và tôi phải mở lại hộp thoại mỗi khi nút lệnh này được gọi. –

Trả lời

5

Đây là một phương pháp mà nên làm việc trong trường hợp của bạn:

Bean mã:

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

Xem mã:

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

Một phương pháp thứ hai cũng nên làm việc là bởi JavaScript:

.210

Để thêm trong <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> 

Xem mã:

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

Lưu ý: Kể từ khi tôi không sử dụng PrimeFaces, tôi đã không kiểm tra mã này vì vậy tôi hy vọng nó hoạt động tốt, nhưng ý tưởng là ở đây!

+0

Thay vì $ (hộp thoại) sử dụng dialog.jq, ví dụ: dialog.jq.css ("top", ...); – Hubert

+0

lol, một câu hỏi không gây khó chịu và gây khó chịu. Bạn thực sự phải làm việc trên người đàn ông tử tế của bạn. Và ngược lại, không giống như bạn đã thử nghiệm với PrimeFaces 3.5 trước khi đăng bài. Cảm ơn bạn. – Hubert

+0

Tôi gặp sự cố tương tự với việc định vị lại hộp thoại. Tôi đã sử dụng dialogWidgetVar.initPosition(); như được mô tả trong chủ đề này. http://forum.primefaces.org/viewtopic.php?f=3&t=16893. Bạn có thể sử dụng nó trong Ajax Request hoặc trong trường hợp của tôi trong một tabView. – kdoteu

13

Tôi đã có một tình huống tương tự với một TabView bên trong một hộp thoại. Nội dung TabView được tải động.

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

Như bạn có thể thấy nó sẽ gọi hàm initPosition() với mọi thay đổi của Tab. Hàm này sẽ định vị lại hộp thoại của bạn. Bạn có thể sử dụng chức năng này trong một số trường hợp.

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

Rất vui được biết :) – djmj

Các vấn đề liên quan