【问题标题】:Primefaces cell edit leave in edit mode when validation fails验证失败时,Primefaces 单元格编辑离开编辑模式
【发布时间】:2020-12-06 17:51:24
【问题描述】:

我在 p:selectOneMenu 上使用带有单元格编辑和验证器的 p:dataTable 和 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>

此屏幕截图我尝试将帐户更改为已存储的收藏夹,该收藏夹已用空格保存,我们不再需要空格。 (是的,我现在有验证,当用户保存他们最喜欢的帐号时不允许有空格,但我们将实施其他验证)当验证失败时,只显示标题和咆哮消息。在他们再次单击下拉菜单之前,红线不可见,如第二个屏幕截图所示。

【问题讨论】:

  • @JasperdeVries 我使用的是 Primefaces 8.0 版。您想到的哪个版本可以解决我的问题?
  • 并且也喜欢How to Ask states...创建一个minimal reproducible example
  • @Kukeltje 您能否更具体地说明我未满足这些要求的原因?我现在总是很害怕因为受到抨击而提出问题。我觉得我提供了最少量的信息,以便让人们了解我的问题的要点,而不会过于冗长。您是说我的问题太详细还是我的示例无法重现。为了使其可重现,我必须添加更多代码,使其更加冗长,而过于冗长的问题是我害怕受到抨击的原因。
  • 明天我会的,谢谢你的提问!我通常不这样做,但诚实地说明为什么会有所帮助。干杯,不用担心!

标签: jsf primefaces primefaces-datatable


【解决方案1】:

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

我认为cellEdit 函数会自动更新实现cellEdit 的组件ClientId。所以不需要在我的 ajax 标签中也明确指定。

而且我也猜测 ajax 标签总是运行更新,但监听器只有成功。

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

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

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 2017-07-02
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2011-02-25
    相关资源
    最近更新 更多