Primefaces验证细胞编辑

时间:2014-02-10 16:31:55

标签: jsf jsf-2 primefaces

我在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

1 个答案:

答案 0 :(得分:2)

你观察到的是因为细胞的事件发生在INVOKE_APPLICATION阶段,因为任何验证失败都没有任何效果。


您只需使用validator /&gt;上的普通<p:inputText属性即可。就像你任何其他JSF输入组件一样。行为将是相同的,无论它是<p:cellEditor/>

的一个方面