【问题标题】:primefaces dataTable rowEditor custom validationprimefaces dataTable rowEditor 自定义验证
【发布时间】:2016-03-01 15:57:16
【问题描述】:

我有一个dataTable,当我编辑它时,我希望它验证assignedQuota >= 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>

【问题讨论】:

    标签: jsf primefaces datatable


    【解决方案1】:

    对于一个简单的解决方案,您可以在控制器中检查此条件。 更优雅的方法是为您的容器 bean 自定义约束验证器。例如,请参阅hibernat doc。

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

    【讨论】:

      【解决方案2】:

      你可以使用ajax事件,例如put:

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

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

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

      另见datatable edit example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-10
        • 2018-02-17
        • 2016-10-19
        • 2016-02-29
        • 1970-01-01
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多