Primefaces hücre düzenlemesi, doğrulama başarısız olduğunda düzenleme modunda kalır
Ben kullanıyorum p:dataTable
bir hücre düzenleme ve doğrulayıcı ile p:selectOneMenu
dü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
ajax
Çağrı Datatable kimliği vardı table
onun içinde update
özniteliği. Bu ClientID'yi kaldırdım ve kaldırdımdisabled="#{facesContext.validationFailed}"
Sanırım cellEdit
iş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)}" />