2015-11-27 5 views
1

У меня есть dataTable, и когда я его редактирую, я хочу, чтобы он проверял, назначен ли assignQuota> = usedQuota. Как я могу это сделать?primefaces dataTable rowEditor custom validation

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

ответ

3

Вы можете использовать событие Ajax, например, говоря:

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

В р: DataTable метод и боба создать последующие:

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

смотри также datatable edit example

+0

спасибо, я получил его, чтобы работать аналогично :) – mindz

+0

@mindz, добро пожаловать – HAYMbl4

0

Для простого решения вы можете просто проверить это условие в своем контроллере. Более элегантным способом будет специальный валидатор ограничений для вашего бонуса. См. Например, hibernat doc.

Единственный трюк в том, что вы должны создать валидатор для компонента (@Target({TYPE})), а не для одной квоты. Валидаторы на членах не могут ссылаться на других участников.

Смежные вопросы