Primefaces hücre düzenlemesi, doğrulama başarısız olduğunda düzenleme modunda kalır

Aug 17 2020

Ben kullanıyorum p:dataTablebir hücre düzenleme ve doğrulayıcı ile p:selectOneMenudüzenlenebilir = true ile. Seçili p: selectOneMenu değeri veya girilen değer geçersizse hücre düzenleme durumunun düzenleme modunda kalmasını (ikinci ekran görüntüsü) ve normal bir form (üçüncü ekran görüntüsü) kullanırsam yapabildiğim gibi girişin etrafında kırmızı kutuyu göstermesini istiyorum. Doğrulama başarısız olduğunda, hırıltı ve mesajlar görüntülenir, ancak açılır menünün etrafındaki kırmızı kutu devam etmez ve korkarım kullanıcı tarafından fark edilmeyebilir (ilk ekran görüntüsü). Kırmızı kutuyu göstermek için ajax güncellemelerini nasıl yapacağımı çözemiyorum, ancak hücreyi düzenleme modunda tutun, böylece açılır menü ve kırmızı kutu hala görünür.

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

Bu ekran görüntüsü Hesabı, bir boşlukla kaydedilmiş kayıtlı bir favori olarak değiştirmeyi denedim ve artık boşluk istemiyoruz. (Evet, şimdi kullanıcı favori hesap numaralarını kaydettiğinde bir alana izin vermemek için doğrulamam var, ancak uygulayacağımız başka doğrulamalar var) Doğrulama başarısız olduğunda, sadece başlık ve hırıltı mesajı gösterilir. Kırmızı çizgi, ikinci ekran görüntüsünde gösterildiği gibi açılır menüyü tekrar tıklayana kadar görünmez.

Yanıtlar

jeff Sep 12 2020 at 01:31

ajaxÇağrı Datatable kimliği vardı tableonun içinde updateözniteliği. Bu ClientID'yi kaldırdım ve kaldırdımdisabled="#{facesContext.validationFailed}"

Sanırım cellEditişlev, cellEdit'i uygulayan ClientId bileşenini otomatik olarak güncelliyor. Yani ajax etiketimde de açıkça belirtmeye gerek yok.

Ayrıca ajax etiketinin her zaman güncellemeyi çalıştırdığını, ancak dinleyicinin yalnızca başarılı olduğunu tahmin ediyorum.

Nedenini tam olarak anlayamayabilirim ama benim için işe yarayan bu:

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