Jest to metoda, która powinna działać w Twoim przypadku:
Bean kod:
@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;
}
}
Zobacz Kod:
<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>
Druga metoda powinna również pracować jest przez JavaScript:
Aby dodać <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>
Zobacz kod:
<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>
Uwaga: Ponieważ nie używam PrimeFaces, nie Przetestowałem ten kod, więc mam nadzieję, że działa dobrze, ale pomysł jest tutaj!
Jeśli renderowanie kompletny p: dialog, to robi różnicę? Logicznie powinien ponownie obliczyć swoją pozycję. –
Dodałem 'dialogUpload' do atrybutu' update' mojego przycisku poleceń, a po przesłaniu go idealnie odwzorowuje okno dialogowe. Jednak działanie aktualizacji jest zamykanie go i muszę ponownie otworzyć okno dialogowe za każdym razem, gdy ten przycisk polecenia jest wywoływany. –