Вызов диалогового окна "Поверхности" из управляемой функции Bean
Привет У меня есть управляемый bean с некоторыми функциями, основанный на некотором условии в этой функции, я хотел бы вызвать диалоговое окно
Управляемая функция bean работает как
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");
}
}
Есть ли какой-либо метод, с помощью которого мы можем вызвать диалоговое окно из такой управляемой функции
Ответы
Ответ 1
Вы можете, используя PrimeFaces
RequestContext
(или PrimeFaces
если вы используете версию 6.2 или выше).
Предположим, у вас есть следующее:
<p:dialog id="myDialogID" widgetVar="myDialogVar">
....
</p:dialog>
Таким образом, как вы делаете в самом facelet, то есть onclick=myDialogVar.show();
то же самое можно сделать в вашем управляемом компоненте следующим образом:
Для PrimeFaces <= 3.x
RequestContext context = RequestContext.getCurrentInstance();
context.execute("myDialogVar.show();");
Для PrimeFaces> = 4.x для PrimeFaces <6.2 (согласно @dognose и @Sujan)
RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF('myDialogVar').show();")
Для PrimeFaces> = 6.2
PrimeFaces current = PrimeFaces.current();
current.executeScript("PF('myDialogVar').show();");
Это для использования целевых диалогов. Если вам просто нужно показать сообщение, не отдавая предпочтения какому-либо пользовательскому диалогу, вы можете сделать это следующим образом:
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);
Вы можете передавать аргументы и устанавливать обратные вызовы. Обратитесь к демонстрационным примерам в ссылке.
Смотрите также:
Ответ 2
Если вы находитесь на первом слое 4.0 или выше:
RequestContext.getCurrentInstance().execute("PF('yourdialogid').show()");
Ответ 3
Решение Врушанка правильное.
Есть и другой способ: в вашем диалоге привяжите визуализированный атрибут к логическому значению вашего компонента и установите для атрибута visible значение true, например, так:
<p:confirmDialog
widgetVar="myDialog"
visible="true"
rendered="#{myBean.showMyDialog}">
В слушателе действий в вашем bean-компоненте вы просто вызываете setShowMyDialog(true)
, и отображается диалоговое окно (при условии, что это действие обновляет ваш диалог). Этот подход полезен, если по какой-то причине вы не хотите, чтобы ваш диалог HTML отображался, когда он невидим для пользователя. Таким образом, у вашего компонента есть доступ к информации о том, виден ли ваш диалог.
Еще одним преимуществом этого решения является то, что ваш диалог не скрыт при обновлении ajax (диалога или его родителя).