Я новичок в разработке JSF. Я использую Eclipse с данными JDK 1.8.0_172, WildFly 16, JSF 2.3, PrimeFaces 7.0. Я разработал страницу с именем FrmTest.x html с управляемым компонентом с областью видимости. После загрузки страницы, когда пользователь нажимает кнопку NEW, я хочу добавить новую строку в таблицу данных. Но вся форма представлена. Я понял, что ajax выполняет обработку без отправки всей формы. Что я должен изменить, чтобы вся форма не была отправлена, но строка была добавлена в таблицу данных?
x html выглядит следующим образом:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<div class="ToolBar" style="background-color:cadetblue;padding:10px;" >
<h:commandButton id="btnNewP" value="new" global="false">
<f:ajax event="click" execute="btnNewP" listener="#{testing.ButtonNew}" render="dataList" />
</h:commandButton>
</div>
<h:form id="FrmTest">
<p:dataTable id="dataList" value="#{testing.getListDto()}" var="lst" Form="FrmTest" paginator="true" rows="20" paginatorPosition="top" editable="true" editMode="cell" rowKey="#{lst.vsCode}" rowIndexVar="rowNumber" selectionMode="single">
<f:facet name="header">
List of Vat Status
</f:facet>
<p:column headerText="Selected">
<div style="text-align: center;">
<p:selectBooleanCheckbox value="#{lst.isSelected}" />
</div>
</p:column>
<p:column id="Code" headerText="Code">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{lst.vsCode}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{lst.vsCode}" >
<p:ajax event = "blur" listener="#{testing.onCellBlur(rowNumber, 'Code')}" update="dataList" />
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column id="Name" headerText="Name">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{lst.vsName}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{lst.vsName}" >
<p:ajax event = "blur" listener="#{testing.onCellBlur(rowNumber, 'Name')}" update="dataList" />
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column id="Description" headerText="Description">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{lst.vsDescription}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{lst.vsDescription}" >
<p:ajax event = "blur" listener="#{testing.onCellBlur(rowNumber, 'Description')}" update="dataList" />
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="is Active">
<div style="text-align: center;">
<p:selectBooleanCheckbox value="#{lst.isActive}" />
</div>
</p:column>
<p:column headerText="Modified By" style="display:none;">
<h:outputText id="ModifiedBy" value="#{lst.modifiedBy}" />
</p:column>
<p:column headerText="Modified Date" style="display:none;">
<h:outputText id="ModifiedDate" value="#{lst.modifiedDate}" />
</p:column>
<p:column headerText="Row State" style="display:none;">
<h:outputText id="RowState" value="#{lst.rowState}" />
</p:column>
<p:column headerText="Error Description" style="display:none;">
<h:outputText id="ErrorDescription" value="#{lst.errorDescription}" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
Кодирование для NEW Кнопка выглядит следующим образом
public void ButtonNew() {
try {
System.out.println("ButtonNew, Entry");
Date modifiedDate = new Date();
dtoUpdated = new VatStatusDto(false, " ", " ", " ", 0.00, " ", " ", " ", " ", " ", "Y", true, getSessionUserCode(), modifiedDate, modifiedDate.toString(), " ", " ", "Added");
listDto.add(0, dtoUpdated);
PrimeFaces.current().ajax().update("FrmTest:dataList");
}
catch (Exception e) {
System.out.println("FrmTest, ButtonNew: " + e.getMessage() + ", " + e.getCause() + ", " + e.getStackTrace());
}
}