9

入力フィールドでいっぱいの動的データテーブルを作成しています。ユーザーがいくつかの入力に値を挿入すると、特定のセルを更新する必要があり、このセルのみが更新されることがあります。簡単にできると思ったのですが、うまくいきませんでした。更新したいセルは「バロール合計」です。このセルは、他の2つのセルの値が変更されたときに更新する必要があります。

更新するセル

編集済み

jsクローム

f:ajax を完全な id で試してみたところ、「id:lancamentoNF:popupLancamentoNF:tabelaItensNF:0:valorTotalItem のコンポーネントが見つかりません」というメッセージが表示されました。p:ajaxに変更してエラーは出ないのに更新しない!!

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

panelGroup "painelItensNF" を完全な ID で更新すると機能しますが、フォーカスが失われ、ユーザーは作業を続けていた入力を見つける必要があります...

4

2 に答える 2

14

を使用するだけupdate="valorTotalItem"です。すでに現在の行を基準にしています。

だから、交換してください

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

<p:ajax ... update="valorTotalItem" />
于 2012-05-17T17:18:58.600 に答える
0

単一のセルを更新することはできないと思います。ID は自動生成されるため、このコンポーネントを ID で更新することはできません。
Primefaces 3.3 (まだ最終リリースではありませんが、スナップショットで作業を開始できます) に切り替えて、primefaces セレクターを使用してやりたいことができるか試してみてください: http://www.primefaces.org/showcase-labs/ ui/selectors.jsf
を変更するとさらに変更が加えられますが、それができるかどうかはわかりません。

または、パネルを更新して JavaScript を追加し、適切なコンポーネントにフォーカスを設定することもできます。p:ajax コンポーネントの「oncomplete」メソッドで JavaScript を実行します。

編集: 更新からインデックスを削除すると、次のようになります。

于 2012-05-17T14:07:11.680 に答える