2014-02-10 62 views
1

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

回答

2

您看到的是什么发生,因为由于CellEditor中的事件在INVOKE_APPLICATION阶段会发生,来不及对任何验证失败产生任何影响。


你可以只使用纯validator属性上<p:inputText />如您在任何其他JSF输入组件。行为将是相同的,无论它是否为<p:cellEditor/>