Подтвердить что ты не робот

Вызов диалогового окна "Поверхности" из управляемой функции 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");
    }
}

Есть ли какой-либо метод, с помощью которого мы можем вызвать диалоговое окно из такой управляемой функции

4b9b3361

Ответ 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 (диалога или его родителя).