2017-01-30 3 views
1

Я начинаю изучать JSF и primeface.I имеет страницу xhtml и Dialog, но actionListener в CommandButton не работает при обновлении. Пожалуйста, помогите мне. Вот содержание моего файла Xhtmlp: commandButton не работает внутри p: dialog

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:p="http://primefaces.org/ui" 
       template="/WEB-INF/template/template.xhtml"> 
    <ui:define name="title">Continents</ui:define> 
    <ui:define name="content"> 
     <h:head > 
       <f:loadBundle basename="fst.info.memoire.bundle.messages" var="msg"/> 
     </h:head> 
     <h:body> 
      <div class="ui-g"> 
       <div class="ui-g-12"> 
        <div class="card"> 
         <h1>Gestion des continents</h1>  
         <h:form id="main" > 
          <p:growl id="messages" showDetail="true" /> 
          <h:panelGrid columns="1" style="margin-bottom:10px" cellpadding="5"> 
          <p:toolbar> 
           <f:facet name="left"> 
            <p:commandButton value="Nouveau" icon="fa fa-plus" onclick="PF('continentAdd').show();" update=":add:displaye1" /> 
           </f:facet> 
          </p:toolbar> 
          <p:dataTable id="listTab" var="continent" value="#{continentBean.listerContinent()}" selectionMode="single" 
          rowKey="#{continent.code}" reflow="true" selection="#{continentBean.selectedContinent}" emptyMessage="Aucun enregistrement"> 
           <f:facet name="header">Liste des continents</f:facet> 
           <p:column headerText="Code"> 
            <h:outputText value="#{continent.code}" /> 
           </p:column> 
           <p:column headerText="Nom" > 
            <h:outputText value="#{continent.nom}" />     
           </p:column> 
           <p:column headerText="Actions" > 
            <div style="text-align: center;"> 
             <p:commandButton id="modifier" icon="fa fa-pencil" title="Modifier" /> 
             <p:commandButton id="supprimer" icon="fa fa-trash" title="Supprimer" actionListener="#{continentBean.supprimerContinent}" update=":main:listTab,:main:messages "> 
              <p:confirm header="Confirmation" message="Etes vous sur de vouloir supprimer cet enregistrement?" icon="fa fa-exclamation-triangle" /> 
             </p:commandButton> 
            </div> 
           </p:column> 
          </p:dataTable> 
          </h:panelGrid> 
          <p:confirmDialog global="true" showEffect="fade" > 
           <p:commandButton value="Oui" type="button" styleClass="ui-confirmdialog-yes" icon="fa fa-check" /> 
           <p:commandButton value="Non" type="button" styleClass="ui-confirmdialog-no" icon="fa fa-close" /> 
          </p:confirmDialog> 

         </h:form> 
         <p:dialog header="Ajouter un continent" widgetVar="continentAdd" 
          resizable="false" modal="true" id="addCont" > 
          <h:form id="add"> 
           <p:growl id="growl" showDetail="true" /> 
           <h:panelGrid id="displaye1" columns="3" cellpadding="4" 
            style="margin:0 auto;"> 
            <p:outputLabel for="code" value="Code" /> 
            <p:inputText value="#{continentBean.code}" id="code" required="true" requiredMessage="#{msg['continent.code']}"> 
             <f:ajax event="blur" render="messagecode"/> 
            </p:inputText> 
            <p:message for="code" style="color:red" id="messagecode"/> 
            <p:outputLabel for="nom" value="Nom" /> 
            <p:inputText value="#{continentBean.nom}" id="nom" required="true" requiredMessage="#{msg['continent.nom']}"> 
             <f:ajax event="blur" render="messageNom"/> 
            </p:inputText> 
            <p:message for="nom" style="color:red" id="messageNom"/> 
           </h:panelGrid> 
           <p:separator /> 
           <div align="center"> 
            <p:commandButton value="Ajouter" update=":main:listTab,:main:messages " icon="fa fa-check" ajax="true" 
            action="#{continentBean.ajouterContinent()}" 
            oncomplete="PF('continentAdd').hide();" /> 
            <p:commandButton value="Annuler" icon="fa fa-close" 
            oncomplete="PF('continentAdd').hide();" /> 
           </div> 
          </h:form> 
         </p:dialog> 
        </div> 
       </div> 
      </div> 
     </h:body> 


    </ui:define> 

</ui:composition> 

и вот мой backingBean

package fst.info.memoire.presentation.admin; 

import java.io.Serializable; 
import java.util.List; 

import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.SessionScoped; 
import javax.faces.context.FacesContext; 
import javax.faces.event.ActionEvent; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Component; 

import fst.info.memoire.model.Continent; 
import fst.info.memoire.service.admin.interf.ContinentService; 


@Component 
@ManagedBean(name="continentBean") 
@SessionScoped 
public class ContinentBean implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    @ManagedProperty(value="#{continentService}") 
    @Autowired 
    ContinentService continentService; 
    String code ; 
    String nom ; 
    Continent selectedContinent ; 
    List<Continent> listContinent ; 
    public ContinentBean() { 
     super(); 
    } 
    public String getCode() { 
     return code; 
    } 
    public void setCode(String code) { 
     this.code = code; 
    } 
    public String getNom() { 
     return nom; 
    } 
    public void setNom(String nom) { 
     this.nom = nom; 
    } 
    public ContinentService getContinentService() { 
     return continentService; 
    } 
    public void setContinentService(ContinentService continentService) { 
     this.continentService = continentService; 
    } 
    public Continent getSelectedContinent() { 
     return selectedContinent; 
    } 
    public void setSelectedContinent(Continent selectedContinent) { 
     this.selectedContinent = selectedContinent; 
    } 
    public List<Continent> getListContinent() { 
     return listContinent; 
    } 
    public void setListContinent(List<Continent> listContinent) { 
     this.listContinent = listContinent; 
    } 

    public List<Continent> listerContinent() { 
     return continentService.listContinent(); 
    } 
    public void ajouterContinent(ActionEvent event){ 
     System.out.println("---------Click!"); 
     FacesContext context = FacesContext.getCurrentInstance(); 
     try{ 
      Continent continent = new Continent(); 
      continent.setCode(this.code); 
      continent.setNom(this.nom); 
      continentService.ajouterContinent(continent); 
      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Succes", "Continent ajouté avec succès"); 
      context.addMessage(null, message); 
     }catch(Exception e){ 
      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur", "Erreur lors de l'ajout"); 
      context.addMessage(null, message); 
     } 

    } 
    public void supprimerContinent(){ 
     addMessage("System Error", "Please try again later."); 
    } 

    public void addMessage(String summary, String detail) { 
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail); 
     FacesContext.getCurrentInstance().addMessage(null, message); 
    } 


} 
+0

Какой commandButton вызывает проблемы? –

+0

+0

Первый commandButton вызывает проблемы, а не отвечает –

ответ

0

Ваша кнопка команда должна выглядеть следующим образом:

<p:commandButton value="Ajouter" update=":main:listTab,:main:messages " icon="fa fa-check" 
      actionListener="#{continentBean.ajouterContinent()}" 
      oncomplete="PF('continentAdd').hide();" /> 

Вам не нужно Аякса = «true», то есть по умолчанию, и самое главное, когда вы собираетесь делать ajax-вызовы, вы должны использовать actionListener вместо action (используется для стандартных синхронных POST-запросы).

+0

Я удалил «ajax = true», но он все еще не работает –

+0

Вы изменили действие на actionListener? –

+0

Да, я изменил действие на actionListener, но если я поместил «обновление», как вы его рекомендовали, это не сработает, потому что эти две разные формы –

Смежные вопросы