सत्यापन विफल होने पर प्राइमफेस सेल एडिट मोड को छोड़ दें

Aug 17 2020

मैं p:dataTableसंपादन p:selectOneMenuयोग्य = सत्य के साथ सेल संपादन और सत्यापनकर्ता के साथ उपयोग कर रहा हूं । मैं चाहता हूँ कि सेल एडिट स्टेट्स एडिट मोड (सेकंड स्क्रीनशॉट) में बने रहें अगर चयनित 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>

इस स्क्रीनशॉट से मैंने खाते को एक संग्रहित पसंदीदा में बदलने की कोशिश की, जिसे एक स्थान के साथ सहेजा गया था और हम अब रिक्त स्थान नहीं चाहते हैं। (हां अब मेरे पास सत्यापन की अनुमति है जब उपयोगकर्ता अपने पसंदीदा खाता संख्या को सहेजने की जगह नहीं दे सकता है, लेकिन ऐसी अन्य मान्यताएं हैं जिन्हें हम लागू करेंगे) जब सत्यापन विफल हो जाता है, तो केवल हेडर और ग्रोएल संदेश दिखाते हैं। रेड आउट लाइन तब तक दिखाई नहीं देती है जब तक वे ड्रॉपडाउन पर फिर से क्लिक नहीं करते हैं जैसा कि दूसरे स्क्रीनशॉट में दिखाया गया है।

जवाब

jeff Sep 12 2020 at 01:31

ajaxकॉल datatable आईडी था tableअपने में updateविशेषता। मैंने उस ClientID को निकाल कर हटा दियाdisabled="#{facesContext.validationFailed}"

मुझे लगता है कि cellEditफ़ंक्शन स्वचालित रूप से उस घटक क्लाइंटआईड को अपडेट करता है जो सेलएडिट को लागू कर रहा है। इसलिए मेरे अजाक्स टैग में स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता नहीं है।

और मैं यह भी अनुमान लगा रहा हूं कि अजाक्स टैग हमेशा अद्यतन को चलाता है लेकिन श्रोता केवल एक सफलता के साथ।

मैं पूरी तरह से समझ नहीं पा रहा हूं कि यह मेरे लिए क्यों काम करता है:

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