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