Событие CellEdit срабатывает при нажатии кнопки табуляции
Моя проблема заключается в том, что когда я нажимаю кнопку табуляции во время редактирования таблицы данных, ячейки таблицы данных закрываются и событие CellEdit запускается все больше и больше. Это заставило меня нажать левую кнопку мыши на любом программном обеспечении на экране, чтобы предотвратить событие редактирования ячейки.
на методе я делаю некоторые вычисления, чтобы появиться в нижнем колонтитуле. Таким образом, он теряет фокус курсора.
Я использую JSF 2.2 и Primefaces 6.1.
Моя цель - когда я изменяю количество, делаю расчеты и обновляю строки нижнего колонтитула, столбцы итогов и итогов, а затем нажимаю курсор табуляции в ячейке цены
Я пытался обновить только нижний колонтитул p:columnGroup, но не смог.
Я пытался использовать: автофокус, но также не удается.
<p:remoteCommand name="onCellEdit" update="invInventoryTable" />
<p:dataTable var="invInventoryTable"
widgetVar="invInventoryTable"
rowIndexVar="index"
rowKey="#{invInventoryTable}"
selectionMode="single"
selection="#{invPurchaseOrderFormMB.invPurchaseOrderDetailEntitySelection}"
dir="rtl"
emptyMessage="#{userData.userDDs['EMPTY_TABLE']}"
editable="true"
editMode="cell"
value="#{invPurchaseOrderFormMB.invPurchaseOrderEntity.invPurchaseOrderDetailEntityList}"
id="invInventoryTable">
<p:ajax event="cellEdit" listener="#{invPurchaseOrderFormMB.onCellEdit}" oncomplete="onCellEdit()"/>
<p:column style="width:7vh;font-size:1.6vh;text-align: right" a:autofocus="#{invPurchaseOrderFormMB.focus}" id="Quantity" headerText="QUANTITY">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{invInventoryTable.quantity}" />
</f:facet>
<f:facet name="input">
<p:inputText id="QuantityT" a:autofocus="#{invPurchaseOrderFormMB.focus}" value="#{invInventoryTable.quantity}" style="width:90%"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:7vh;font-size:1.6vh;text-align: right" id="Price" headerText="PRICE">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{invInventoryTable.price}" />
</f:facet>
<f:facet name="input">
<p:inputText id="PriceT" value="#{invInventoryTable.price}" style="width:100%"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:7vh;font-size:1.6vh;text-align: right" id="Discount" headerText="DISCOUNT">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{invInventoryTable.discountRate}"/>
</f:facet>
<f:facet name="input">
<p:inputText id="DiscountT" value="#{invInventoryTable.discountRate}" style="width:100%">
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:7vh;font-size:1.6vh;text-align: right" id="total" headerText="TOTAL">
<h:outputLabel id="totalVal" value="#{invInventoryTable.total}" />
</p:column>
<p:column style="width:7vh;font-size:1.6vh;text-align: right" id="NET" headerText="NET">
<h:outputLabel id="netVal" value="#{invInventoryTable.net}" />
</p:column>
<p:columnGroup type="footer">
<p:row>
<p:column colspan="4" style="text-align:right" footerText="TOTAL :" />
<p:column id="qtyId" footerText="#{invPurchaseOrderFormMB.totalQuatity}" />
<p:column/>
<p:column/>
<p:column id="totId" footerText="$#{invPurchaseOrderFormMB.total}" />
<p:column id="totNetId" footerText="$#{invPurchaseOrderFormMB.totalNet}" />
<p:column/>
<p:column/>
<p:column/>
<p:column/>
<p:column/>
</p:row>
</p:columnGroup>
</p:dataTable>
1 ответ
Я разработал что-то подобное в моем проекте. мое решение состоит в том, чтобы отключить редактирование ячейки с датой и использовать ajax только для количественной ячейки, как я хочу:
<p:dataTable var="invInventoryTable"
widgetVar="invInventoryTable"
rowIndexVar="index"
rowKey="#{invInventoryTable}"
selectionMode="single"
selection="#{invPurchaseOrderFormMB.invPurchaseOrderDetailEntitySelection}"
dir="rtl"
emptyMessage="#{userData.userDDs['EMPTY_TABLE']}"
editable="true"
editMode="cell"
value="#{invPurchaseOrderFormMB.invPurchaseOrderEntity.invPurchaseOrderDetailEntityList}"
id="invInventoryTable">
<p:ajax event="cellEdit" onstart="return false;" process="@this"/>
<p:column style="width:7vh;font-size:1.6vh;text-align: right" a:autofocus="#{invPurchaseOrderFormMB.focus}" id="Quantity" headerText="QUANTITY">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{invInventoryTable.quantity}" />
</f:facet>
<f:facet name="input">
<p:inputText id="QuantityT" a:autofocus="#{invPurchaseOrderFormMB.focus}"
onkeydown="if(event.keyCode != 9 && event.keyCode != 13){onkeydown();
value="#{invInventoryTable.quantity}" style="width:90%"
<p:ajax event="keydown" listener="#{invPurchaseOrderFormMB.onCellEdit}" update=""/>
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
Я надеюсь, что это помогает:)