2015-05-21 26 views
5

Sto cercando di rendere un DataTable modificabile per cella in Primefaces, ma dopo una modifica di una cella, l'evento non è stato inviato e il mio codice non può rilevare il valore nuovo, e non c'è nessun errore o log nella traccia dello stackCellEdit evento non funzionante dopo la modifica della cella in primefaces

qui è il mio codice:

xhtml:

<p:dataTable id="ListC" 
    value="#{recruitmentProcessMB.candidateListInProcess}"   
    var="candid" rowKey="#{candid.idCandidate}" 
    style="border:0px; " editable="true" editMode="cell"> 

    <p:ajax event="cellEdit" 
       update="ListC" 
       listener="#{recruitmentProcessMB.onCellEdit}" 
      /> 

    <p:column headerText="Date d'entretien"> 
     <p:cellEditor> 
      <f:facet name="output"> 
       <h:outputText value="#{candid.interviewDateCandidate}"> 
        <f:convertDateTime type="date" dateStyle="short" 
         pattern="dd/MM/yyyy" timeZone="Europe/Paris" /> 
       </h:outputText> 
      </f:facet> 
      <f:facet name="input"> 
       <p:calendar id="date" 
        value="#{candid.interviewDateCandidate}" 
        navigator="true" pattern="dd/MM/yyyy" mask="true" /> 
      </f:facet> 
     </p:cellEditor> 
    </p:column> 

    <p:column id="vRH" headerText="Validation Par RH " disabledSelection="#{candid.currentTask!='InterviewAndValidationByRH'}"> 
    <p:cellEditor > 
     <f:facet name="output"> 
     <h:outputText 
      value="#{candid.decisionOfRh}" /> 
      </f:facet> 
     <f:facet name="input"> 
      <h:selectOneMenu id="rhDecision" style="display: inline-block;" 
         value="#{candid.decisionOfRh}" 
         disabled="#{candid.currentTask!='InterviewAndValidationByRH'}" > 
      <f:selectItem itemLabel="Selectionner..." /> 
      <f:selectItem itemLabel="Accepté" itemValue="Accepté"/> 
      <f:selectItem itemLabel="Refusé" itemValue="Refusé"/> 
     </h:selectOneMenu> 
     </f:facet> 
     </p:cellEditor> 
    </p:column> 
</p:dataTable> 

Bean:

public void onCellEdit(CellEditEvent event) { 
      FacesContext context = FacesContext.getCurrentInstance(); 
      Candidate c = context.getApplication().evaluateExpressionGet(
        context, "#{candid}", Candidate.class); 

      System.out.println("+++++++++++ "+c.getFirstNameCandidate()+" "+c.getNameCandidate()); 
      System.out.println("*********** "+event.getNewValue().toString()); 
      logger.info(c.getInterviewDateCandidate().toString()); 
} 
+0

Avete un 'h: form' arround tua DataTable? –

+0

@ Mathieu Castets: sì ho – Spartan

+0

Cosa succede se rimuovi 'update =" ListC "' nel tuo 'p: ajax'? Il tuo metodo bean è chiamato? –

risposta

3

cercano di aggiungere l'attributo immediate="true" nel nel tag p: Ajax e il mio metodo di fagioli è stato chiamato

<p:ajax event="cellEdit" 
     update="ListC" 
     immediate="true" 
     listener="#{recruitmentProcessMB.onCellEdit}" 
     process="@this" 
/>