验证失败时,Primefaces单元格编辑将进入编辑模式

问题描述

我正在使用p:dataTable进行单元格编辑,并在p:selectOneMenu上使用editable = true进行验证。如果所选的p:selectOneMenu值或键入的值无效,我希望单元格的编辑状态保持在编辑模式(第二张屏幕截图),并在输入周围显示红色框,就像我使用常规格式时一样(第三张屏幕截图)。验证失败时,将显示咆哮声和消息,但下拉框周围的红色框不会持续存在,恐怕用户可能不会注意到它(第一个屏幕截图)。我无法弄清楚如何执行Ajax更新以显示红色框,但是将单元格保持在编辑模式下,以便下拉菜单和红色框仍然可见。

<p:dataTable id="table" value="#{bean.data}" var="lineItem" editable="true" editMode="cell">

<p:column headerText="* Account">
  <p:cellEditor>
    <f:facet name="output">
       <h:outputText value="#{lineItem.account}" />
    </f:facet>

    <f:facet name="input">
      <p:selectOneMenu id="so" value="#{lineItem.account}" editable="true" dynamic="true"  converter="omnifaces.SelectItemsConverter" title="Type an account or select a stored favorite" validator="com.gdeb.rozycki.app.acountValidator" >

      <f:selectItem noSelectionOption="true" itemLabel="---Favorites" itemValue="null" />
      <f:selectItems value="#{bean.favorites}" var="fav" itemLabel="#{fav.acctNum}" itemValue="#{fav}" />
                                            
      <p:ajax disabled="#{facesContext.validationFailed}" update="table growl messages" listener="#{bean.updateAccountInline(lineItem)}" />
      </p:selectOneMenu>
    </f:facet>
  </p:cellEditor>
</p:column>

此屏幕快照我尝试将帐户更改为存储的收藏夹,并用空格保存了,我们不再需要空格。 (是的,我现在进行了验证,以防止用户保存自己喜欢的帐号时出现空格,但是我们将实施其他验证。)验证失败时,仅显示标题和咆哮消息。直到他们再次单击下拉菜单(如第二个屏幕截图所示),红色的输出线才可见。

enter image description here

enter image description here

enter image description here

解决方法

ajax调用在其table属性中具有数据表ID update。我删除了该ClientID并删除了disabled="#{facesContext.validationFailed}"

我认为cellEdit函数会自动更新实现cellEdit的组件ClientId。因此,也无需在我的ajax标记中明确指定。

我还猜测ajax标记总是运行更新,但侦听器只能运行成功。

我可能不完全理解为什么,但这对我有用:

  <p:ajax update="growl messages" listener="#{bean.updateAccountInline(lineItem)}" />

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...