У меня есть таблица данных Primefaces с редактированием ячеек, которая переключается на логическую переменную в представлении.
У меня есть три проблемы:
- В режиме редактирования я изменяю значение и нажимаю кнопку «Сохранить» на странице, оно не сохраняет новое значение. Если я сначала нажму в любом другом месте на странице, а затем нажму «Сохранить», оно сохранит значение. Мне нужно, чтобы это значение сохранялось, если вы сначала нажмете «Сохранить».
- Если я редактирую ячейку, которая является входным текстом, и я выбираю поле, теперь это выходной текст, пока я не щелкну там снова. Я хочу, чтобы поле выглядело как вводимый текст в режиме редактирования.
- Когда нажимается кнопка сохранения, вспомогательный метод устанавливает для редактируемого логического значения значение false, и остальная часть страницы подчиняется, и dataTable выглядит так, как будто он подчиняется, но если вы щелкнете ячейку, она позволит вам редактировать ее.
Вот код:
<p:dataTable value="#{view.LineItems}" var="lineItem" rowKey="#{lineItem.lineItemId}"
resizableColumns="false" editable="#{view.editable}" editMode="cell"
editingRow="#{view.editable}" id="requestLineItemsTable">
<p:ajax event="cellEdit" listener="#{view.cellEdited}" immediate="true" update="@this" />
<p:column styleClass="centerColumnData" headerText="Item Name" style="width: 140px;">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{lineItem.title}"/>
</f:facet>
<f:facet name="input">
<h:inputText value="#{lineItem.title}"/>
</f:facet>
</p:cellEditor>
</p:column> ...
а это бэкэнд (с этим пока ничего не делаю)
public void cellEdited(CellEditEvent event)
{
Object oldValue = event.getOldValue();
}
а вот кнопки сохранения и редактирования на той же странице .xhtml, что и datatable
<p:commandLink process="@this"
action="#{view.changeModeToEdit}"
update="@form"
rendered="#{!view.editMode">
<h:graphicImage library="images" name="edit20.png" title="#{__Common.edit}"
style="height: 15px; width: 15px;"/>
</p:commandLink>
<components:linkWithSpinner linkStyle="margin-right: 20px;" loadingImageStyle="margin-right: 20px;"
linkStyleClass="activeButton saveButtonRequestDetails" loadingImageStyleClass="saveButtonRequestDetails"
linkText="#{__CommonButton.save}"
process="@form" update="@form"
actionMethod="#{view.updateRequest()}"/>
view.updateRequest() устанавливает для редактируемого значение false. Я использую Праймфейс 4.0