primefaces dataTable rowEditor自定义验证

时间:2015-11-27 12:33:03

标签: jsf primefaces datatable

我有一个dataTable,当我编辑它时,我希望它验证是否assignQuota> = usedQuota。我怎么能这样做?

<p:dataTable id="vessels" var="ves" value="#{assignedVessels}" editable="true">
  <p:column>
        <p:cellEditor>  
            <f:facet name="output">
               <p:outputLabel value="#{ves.assignedQuota}"/>
            </f:facet>
            <f:facet name="input">
               <p:inputText value="#{ves.assignedQuota}" />
            </f:facet>
        </p:cellEditor>    
    </p:column>
    <p:column>
        <p:cellEditor>
            <f:facet name="output">
               <p:outputLabel value="#{ves.usedQuota}"/>
            </f:facet>
            <f:facet name="input">
               <p:inputText value="#{ves.usedQuota}" />
             </f:facet>
        </p:cellEditor>
   </p:column>
   <p:column>
      <p:rowEditor/> 
   </p:column>

2 个答案:

答案 0 :(得分:3)

您可以使用 ajax事件 ,例如:

<p:ajax event="rowEdit" listener="#{bean.onRowEdit}"/>

进入 p:dataTable 并在bean中创建follow方法:

public void onRowEdit(RowEditEvent event) {
    // add you check here (assignedQuota >= usedQuota)
}

另见datatable edit example

答案 1 :(得分:0)

对于一个简单的解决方案,您可以在控制器中检查这种情况。 更优雅的方式是为您的容器bean定制约束验证器。例如,请参阅hibernat doc

这里唯一的技巧是你必须为bean(@Target({TYPE}))创建一个验证器,而不是为一个配额值。成员的验证者不能引用其他成员。