2012-05-17 25 views
9

Tôi đang tạo một dữ liệu động đầy đủ các trường nhập. Đôi khi khi người dùng chèn các giá trị vào một số yếu tố đầu vào, một ô cụ thể sẽ được cập nhật và chỉ có ô này. Tôi nghĩ rằng nó có thể đơn giản, nhưng chưa làm cho nó hoạt động được. Các tế bào Tôi muốn cập nhật là "dũng cảm tổng", tế bào này sẽ được cập nhật khi giá trị của hai người khác thay đổi tế bào:Cách cập nhật chỉ ô cụ thể trong phần tử dữ liệu

cell to update

EDITED

js chrome

Tôi đã tryied f: ajax với id hoàn chỉnh và có "Thành phần với id: lancamentoNF: popupLancamentoNF: tabelaItensNF: 0: valorTotalItem không tìm thấy". Thay đổi thành p: ajax và không có lỗi xảy ra nhưng nó không cập nhật !!

<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> 

Nó hoạt động khi tôi cập nhật panelGroup "painelItensNF" với id hoàn tất, nhưng sự tập trung bị mất và người sử dụng nên tìm đầu vào ông làm việc để tiếp tục ...

+0

Bạn nên thay thế câu trả lời chấp nhận của bạn vì điều này có vẻ là có thể. –

Trả lời

14

Chỉ cần sử dụng update="valorTotalItem". Nó liên quan đến hàng hiện tại rồi.

Vì vậy, hãy thay

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

bởi

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

Nó không hoạt động ... Chỉ cần sử dụng id hoàn chỉnh mà không có chỉ số hàng hoạt động – brevleq

+0

Nó đã luôn luôn làm việc cho tôi. Bạn đang sử dụng phiên bản/phiên bản JSF và phiên bản PF nào? – BalusC

+0

PF 2.2.1 với myfaces 2.1.6 – brevleq

0

Tôi không nghĩ rằng đó là có thể cập nhật một ô đơn lẻ. Id của nó được tạo tự động, vì vậy bạn không thể cập nhật thành phần này theo id.
Bạn có thể thử chuyển sang các dấu phẩy 3.3 (không phải là bản phát hành cuối cùng, nhưng bạn có thể bắt đầu làm việc với ảnh chụp nhanh) và thử xem bạn có thể thực hiện những gì bạn muốn bằng cách sử dụng bộ chọn dấu phẩy không: http://www.primefaces.org/showcase-labs/ui/selectors.jsf
bạn sẽ có nhiều thay đổi hơn nhưng tôi không chắc liệu bạn có thể làm được không.

Hoặc, bạn có thể cập nhật bảng điều khiển và thêm một số javascript để đặt trọng tâm cho thành phần appropiate. thực thi javascript trong phương thức "chưa hoàn thành" của thành phần p: ajax.

EDIT: Tháo chỉ số từ bản cập nhật, vì vậy nó trông như thế này: ": lancamentoNF: popupLancamentoNF: tabelaItensNF: valorTotalItem" Và tất nhiên BalusC là đúng, bạn cũng có thể chỉ cần sử dụng "valorTotalItem"

+0

Cảm ơn bạn đã trả lời. Tôi đã thêm ảnh mới hiển thị id theo một mẫu. Dự án này là dificult để thay đổi để nguyên tố 3 (Tôi đã cố gắng). – brevleq

+0

@brevleq cố gắng cập nhật điều này: ": lancamentoNF: popupLancamentoNF: tabelaItensNF: valorTotalItem" (không có chỉ mục và bắt đầu bằng ":"). nó sẽ không ném ngoại lệ, nhưng tôi không chắc nó sẽ được cập nhật cái gì. có thể là toàn bộ cột "valorTotaItem". cho tôi biết điều gì xảy ra – Damian

+0

Cảm ơn @Damian, cách tiếp cận xóa chỉ mục đã hoạt động! Tôi không hiểu tại sao, nhưng đã làm việc ... Hãy thay đổi câu trả lời để tôi có thể đánh dấu là đã được giải quyết :) – brevleq

Các vấn đề liên quan