首页 > 解决方案 > 如何在 Primefaces 中显示来自服务器端的消息到对话框

问题描述

早上好,我正在做一个方法来验证数据库中是否存在品牌并显示该品牌刚刚存在的消息,我想访问对话框“manageBrand”并将此消息放入其中而不退出对话。在 Primefaces 中可以做到这一点吗?

<p:dialog id ="manageBrand" header="Brand Details" showEffect="fade" modal="true"
                  widgetVar="manageBrandDialog" responsive="true">
                  <p:growl id="messaggi" showDetail="true"/>
            <p:panelGrid id="manage-product-content" class="ui-fluid" columns="2">
                
                   <p:outputPanel rendered="#{not empty marcaController.selected}">
                    <div class="p-field">
                        <p:outputLabel for="name">Name</p:outputLabel>
                        
                        <p:inputText id="name" value="#{marcaController.selected.nome}" required="true"/>
                    </div>
                   
                    </p:outputPanel>  
                  
            </p:panelGrid>

            <f:facet name="footer">
                <p:commandButton value="Save" icon="pi pi-check" action="#{marcaController.creaMarca()}"
                                 update="manage-brand-content" process="manage-brand-content @this"/>
                <p:commandButton value="Cancel" icon="pi pi-times" onclick="PF('manageBrandDialog').hide()"
                                 class="ui-button-secondary"/>
            </f:facet>
        </p:dialog>

public void creaMarca() {
        //m = selectedbrand
       if(m.getIdmarca()==null) {
           List<Marca> list = marcaDao.ricercaMarcaByNome(m.getNome());//find if exixt a brand with selected name
           if(list.isEmpty()||list==null) {
               try {
                marcaDao.create(m);
                FacesMessage m = new FacesMessage
                        (FacesMessage.SEVERITY_INFO, "Creazione andata a buon fine"
                                ,"OK");
                FacesContext.getCurrentInstance().addMessage("Success", m);
            } catch (Exception e) {
                FacesMessage m = new FacesMessage
                        (FacesMessage.SEVERITY_ERROR, e.getMessage()
                                ,"KO");
                FacesContext.getCurrentInstance().addMessage("Error", m);
                
                
            } 
               PrimeFaces.current().executeScript("PF('manageBrand').hide()");
                PrimeFaces.current().ajax().update("form:messages", "form:datatable-brands");
           }
           else {
               
               FacesMessage m = new FacesMessage
                        (FacesMessage.SEVERITY_INFO, "Brand  exist "
                                ,"OK");
               
               PrimeFacesContext.getCurrentInstance().addMessage(null, m);
               PrimeFaces.current().ajax().update(":messaggi","form:manageBrand");
               //PrimeFaces.current().dialog().showMessageDynamic(m);
               
           }
            
       }


标签: jsfprimefaces

解决方案


在您的情况下,通过其 ID 更新对话框将关闭它。为避免这种情况,您应该只更新所需的元素或其容器,或删除该更新,并将咆哮声设置为自动更新。另一种方法应该是在服务器端将您的消息设置为特定的 id。


推荐阅读