Диалоговое окно вызова на основе схемы 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 (диалога или его родителя).