【发布时间】:2020-04-21 17:43:30
【问题描述】:
我是 JSF 开发的新手。我将 Eclipse 与 JDK 1.8.0_172、WildFly 16、JSF 2.3、PrimeFaces 7.0 数据表一起使用。我开发了一个名为 FrmTest.xhtml 的页面,其中包含一个具有视图范围的托管 bean。加载页面后,当用户单击 NEW 按钮时,我想在数据表中添加一个新行。但是整个表单都提交了。我知道 ajax 在不提交整个表单的情况下进行处理。我应该更改什么以便不提交整个表单但将行添加到数据表中?
xhtml如下:
<!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());
}
}
【问题讨论】:
标签: ajax jsf primefaces