2012-05-17 3 views
9

Ich erstelle eine dynamische Datentabelle voller Eingabefelder. Manchmal, wenn Benutzer Werte in einige Eingaben einfügen, sollte eine bestimmte Zelle und nur diese Zelle aktualisiert werden. Ich dachte, es könnte einfach sein, aber es hat noch nicht funktioniert. Die Zelle I-Update will, ist "Tapferkeit total", sollte diese Zelle aktualisiert werden, wenn der Wert von zwei anderen Zellenwechsel:Wie Update nur bestimmte Zelle in Primzahlen DataTable

cell to update

EDITED

js chrome

Ich habe tryied f: ajax mit vollständiger ID und bekam "Komponente mit der ID: lancamentoNF: popupLancamentoNF: tabelaItensNF: 0: valorTotalItem nicht gefunden". Geändert zu p: ajax und keine Fehler passieren, aber es aktualisiert nicht !!

<h:panelGroup id="painelItensNF" layout="block" styleClass="hrgi-div-form aba-lancamento-nf clearfix" style="overflow:auto;"> 
    <h:panelGroup layout="block" style="width: 1700px;"> 
     <p:dataTable id="tabelaItensNF" value="#{modeloTabelaDinamicaItemNF.itens}" var="itemEmbrulhado" styleClass="tabelaDinamica" height="174" style="width: 100%;" rowIndexVar="indice"> 
      ... (some columns) 
      <p:column style="width: 5%" 
         headerText="quantidade"> 
       <hrgi:spinner id="quantidadeItem" 
           value="#{itemEmbrulhado.item.produto.detalheTributavel.quantidade}" 
           dinheiro="false" 
           fator="#{itemEmbrulhado.item.produto.detalheTributavel.unidadeFracionada?0.01:1}" 
           local="pt-BR" min="0.00" width="70"> 
        <p:ajax event="change" 
          update="lancamentoNF:popupLancamentoNF:tabelaItensNF:#{indice}:valorTotalItem" 
          listener="#{controladorPopupLancamentoNF.calcularValorTotalItem(itemEmbrulhado)}" global="false" /> 
        <f:convertNumber 
          maxFractionDigits="#{itemEmbrulhado.item.produto.detalheTributavel.unidadeFracionada?2:0}" 
          minFractionDigits="#{itemEmbrulhado.item.produto.detalheTributavel.unidadeFracionada?2:0}" 
          locale="pt-BR" 
          for="quantidadeItem"/> 
       </hrgi:spinner> 
      </p:column> 
      <p:column style="width: 5%" 
         headerText="valor unitario"> 
       <hrgi:spinner id="valorUnitarioItem" 
           value="#{itemEmbrulhado.item.produto.detalheTributavel.valorUnitario}" 
           dinheiro="true" fator="0.01" local="pt-BR" min="0.00" width="70"> 
        <p:ajax event="change" 
          update="lancamentoNF:popupLancamentoNF:tabelaItensNF:#{indice}:valorTotalItem" 
          listener="#{controladorPopupLancamentoNF.calcularValorTotalItem(itemEmbrulhado)}" global="false"/> 
        <f:convertNumber type="currency" currencyCode="BRL" currencySymbol="R$ " 
            maxFractionDigits="10" minFractionDigits="2" locale="#{cc.attrs.local}" 
            for="valorUnitarioItem"/> 
       </hrgi:spinner> 
      </p:column> 
      <p:column style="width: 3%" 
         headerText="valor total"> 
       <h:outputText id="valorTotalItem" value="#{itemEmbrulhado.item.produto.valorTotal}"> 
        <f:convertNumber type="currency" currencyCode="BRL" currencySymbol="R$ " 
            maxFractionDigits="2" minFractionDigits="2" locale="pt-BR" 
            for="valorUnitarioItem"/> 
       </h:outputText> 
      </p:column> 
      ... (more columns) 
     </p:dataTable> 
    </h:panelGroup> 
</h:panelGroup> 

Es funktioniert, wenn ich die panelGroup „painelItensNF“ mit vollständiger ID aktualisieren, aber der Fokus verloren und Benutzer sollte die Eingangs er arbeitete, um fortzufahren ...

+0

Sie sollten Ihre akzeptierte Antwort ersetzen, wie dies möglich zu sein scheint. –

Antwort

14

Verwenden Sie einfach update="valorTotalItem". Es ist bereits relativ zur aktuellen Zeile.

So ersetzen

<p:ajax ... update="lancamentoNF:popupLancamentoNF:tabelaItensNF:#{indice}:valorTotalItem" /> 

von

<p:ajax ... update="valorTotalItem" /> 
+0

Es hat nicht funktioniert ... Nur mit vollständiger ID ohne Zeilenindex funktioniert – brevleq

+0

Es hat immer für mich gearbeitet. Welche JSF Impl/Version und PF Version verwenden Sie? – BalusC

+0

PF 2.2.1 mit MyFaces 2.1.6 – brevleq

0

Ich glaube nicht, dass es finden möglich, eine einzelne Zelle zu aktualisieren. Die ID wird automatisch generiert. Sie können diese Komponente also nicht anhand der ID aktualisieren.
Sie können versuchen, zu Primefaces 3.3 (noch nicht endgültige Version, aber Sie können mit dem Snapshot arbeiten) zu wechseln, und versuchen, wenn Sie tun können, was Sie wollen mit Primzahlen-Selektoren: http://www.primefaces.org/showcase-labs/ui/selectors.jsf
Sie werden mehr Änderungen damit haben, aber ich bin mir nicht sicher, ob du es schaffen wirst.

Oder Sie könnten das Panel aktualisieren und etwas Javascript hinzufügen, um den Fokus auf die entsprechende Komponente zu setzen. Führen Sie das Javascript in der Methode "oncomplete" der p: ajax-Komponente aus.

EDIT: Entfernen Sie den Index aus dem Update, so sieht es wie folgt aus: ": lancamentoNF: popupLancamentoNF: tabelaItensNF: valorTotalItem" Und natürlich BalusC richtig ist, können Sie auch "valorTotalItem" just

+0

Danke für Ihre Antwort. Ich habe ein neues Bild hinzugefügt, das zeigt, dass die ID einem Muster folgt. Dieses Projekt ist schwierig, zu primecefaces 3 zu wechseln (ich habe es bereits versucht). – brevleq

+0

@bivreq versuchen, dies zu aktualisieren: ": lancamentoNF: popupLancamentoNF: tabelaItensNF: valorTotalItem" (ohne Index und beginnend mit ":"). Es wird keine Ausnahme auslösen, aber ich bin mir nicht sicher, was es aktualisiert wird. vielleicht die ganze Spalte "valorTotaItem". lass mich wissen, was passiert – Damian

+0

Dank @Damian, der Ansatz des Entfernens Index funktioniert! Ich verstehe nicht warum, aber arbeitete ... Bitte ändern Sie die Antwort, damit ich als gelöst markieren kann :) – brevleq