jsf - open - primefaces update component from backing bean
Llamando el cuadro de diálogo de Primefaces desde la función Managed Bean (3)
La solución de Vrushank es correcta.
También hay otra forma: en su cuadro de diálogo, enlace el atributo representado al valor booleano de su bean, y establezca el atributo visible en verdadero, como esto:
<p:confirmDialog
widgetVar="myDialog"
visible="true"
rendered="#{myBean.showMyDialog}">
En el detector de acciones en su bean, simplemente llame a setShowMyDialog(true)
y se mostrará el diálogo (asumiendo que esta acción está actualizando su diálogo). Este enfoque es útil si, por alguna razón, no desea que el HTML del cuadro de diálogo se represente cuando el usuario no lo pueda ver. De esta manera, en su bean tiene acceso a la información, ya sea que su diálogo sea visible.
Otro beneficio de esta solución es que su diálogo no está oculto en la actualización de ajax (de dialog o su padre).
Hola, tengo un bean administrado con algunas funciones, basado en alguna condición de esa función. Me gustaría llamar a un cuadro de diálogo.
La función de frijol administrada va como
public String editStudent(){
setReadOnly(false);
setButton(true, true, true, false, true, true,true);
LockItem lItem;
if(selectStudent !=null){
lItem = (LockItem) services.getbyId("LockItem", condition);
if (lItem == null){
System.out.println("Student Avalibale for process :::");
studentRedirect();
return "studentEdit.jsf?faces-redirect=true";
} else {
//To show dialog from here
System.out.println("Student Not Avalibale : Locked By " + lItem.getLockedBy());
}
} else {
FacesMessage msg;
msg = new FacesMessage("Please select the record.");
FacesContext.getCurrentInstance().addMessage(null, msg);
return show("menu");
}
}
¿Existe algún método mediante el cual podamos llamar al cuadro de diálogo desde dicha función administrada?
Puede, utilizando el RequestContext
(o PrimeFaces
si está usando la clase de la versión 6.2 o superior).
Supongamos que tienes lo siguiente:
<p:dialog id="myDialogID" widgetVar="myDialogVar">
....
</p:dialog>
Así que la forma en que lo haces en la faceta misma, es decir, onclick=myDialogVar.show();
, lo mismo se puede hacer en su bean gestionado así:
Para PrimeFaces <= 3.x
RequestContext context = RequestContext.getCurrentInstance();
context.execute("myDialogVar.show();");
Para PrimeFaces> = 4.x para PrimeFaces <6.2 (según @dognose y @Sujan)
RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF(''myDialogVar'').show();")
Para PrimeFaces> = 6.2
PrimeFaces current = PrimeFaces.current();
current.executeScript("PF(''myDialogVar'').show();");
Esto es para el uso de diálogos específicos. Si solo necesita mostrar un mensaje sin dar preferencia a ningún cuadro de diálogo personalizado, puede hacerlo de esta manera:
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Message Title", "Message body");
// For PrimeFaces < 6.2
RequestContext.getCurrentInstance().showMessageInDialog(message);
// For PrimeFaces >= 6.2
PrimeFaces.dialog().showMessageDynamic(message);
Puede pasar argumentos y establecer devoluciones de llamada también. Consulte los ejemplos de escaparate en el enlace.
Ver también:
Si estás en primeface 4.0 o arriba:
RequestContext.getCurrentInstance().execute("PF(''yourdialogid'').show()");