Đâ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!
Nguồn
2013-05-16 17:42:35
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ó. –
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. –