我在Primefaces中使用单元格编辑器来更新数据表中的单元格。但是,我想在确认更改之前验证输入。
我已将FacesContext.getCurrentInstance().validationFailed();
用于此目的,但仍然更新了单元格。
这就是我实施它的方式:
<p:dataTable value="#{bean.list}" var="var" id="table" editMode="cell" editable="true">
<p:ajax event="cellEdit" listener="#{bean.onCellEdit}" update="@form"/>
<p:column headerText="Quantity">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{var.quantity}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{var.quantity}"/>
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
Bean方法:
public void onCellEdit(CellEditEvent event) {
//validate new value
if(!validate(event.getNewValue())){
//if validation returned false stop updating the cell
FacesContext.getCurrentInstance().validationFailed();
}
}
如果新值未通过验证,我想停止更新单元格,但无论如何都会更新单元格。我该如何解决这个问题?
PS:Primefaces 3.5
答案 0 :(得分:2)
你观察到的是因为细胞的事件发生在INVOKE_APPLICATION
阶段,因为任何验证失败都没有任何效果。
您只需使用validator
/&gt;上的普通<p:inputText
属性即可。就像你任何其他JSF输入组件一样。行为将是相同的,无论它是<p:cellEditor/>