9

我正在创建一个充满输入字段的动态数据表。有时,当用户在某些输入中插入值时,应更新特定单元格,并且仅更新此单元格。我认为这可能很简单,但并没有使它起作用。我要更新的单元格是“总价值”,当其他两个单元格的值发生变化时,应该更新这个单元格:

要更新的单元格

已编辑

js 铬

我用完整的 id 尝试了 f:ajax 并得到了“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>

当我用完整的 id 更新 panelGroup“painelItensNF”时它可以工作,但是焦点丢失了,用户应该找到他正在努力继续的输入......

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。

编辑:从更新中删除索引,所以它看起来像这样: ":lancamentoNF:popupLancamentoNF:tabelaItensNF:valorTotalItem" 当然 BalusC 是对的,你也可以只使用 "valorTotalItem"

于 2012-05-17T14:07:11.680 回答