2010-02-17 4 views
5

मेरे पास rich:extendedDataTable है और मैं कॉलम फ़िल्टरिंग का उपयोग कर रहा हूं। मैं चाहता हूं कि उपयोगकर्ता "परिचय" कुंजी में प्रवेश करने के बाद फ़िल्टर को निकाल दिया जाए, लेकिन जावास्क्रिप्ट में ऐसी कोई घटना नहीं है।रिचफ़ेस कॉलम फ़िल्टर: परिचय कुंजी पर किसी ईवेंट को कैसे फायर करें

मैं ऐसा इसलिए करना चाहता हूं क्योंकि अगर मैं onkeyup जैसी घटनाओं का उपयोग करता हूं तो मुझे बहुत से अनुरोध मिलते हैं और मुझे इसकी वजह से समस्याएं होती हैं। मैं समृद्ध 3.3.0 जीजी और फेसलेट का उपयोग कर रहा हूं।

<ui:composition> 
<a4j:form ajaxSingle="true" requestDelay="700"> 
    <rich:extendedDataTable id="tablePatients" value="#{user.patientsTab.patients}" var="patient" rows="20" 
     onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"> 
     <f:facet name="header"> 
      <h:outputText value="Patient List" /> 
     </f:facet> 
     <rich:column label="#{msg.id}"> 
      <f:facet name="header"> 
       <h:outputText value="Id" /> 
      </f:facet> 
      <h:outputText value="#{patient.id}" id="patientId" /> 
     </rich:column> 
     <rich:column label="#{msg.name}" sortable="true" filterBy="#{patient.profile.name}" filterEvent="onkeyup"> 
      <f:facet name="header"> 
       <h:outputText value="Name" /> 
      </f:facet> 
      <h:outputText value="#{patient.profile.name}" id="name" style="#{patient.isUnrated? 'font-weight:bold':''}" /> 
     </rich:column > 
     <rich:column label="#{msg.lastexamination}" sortable="true"> 
      <f:facet name="header"> 
       <h:outputText value="Last Examination" /> 
      </f:facet> 
      <h:outputText value="#{patient.lastExaminationDate}" style="#{patient.isUnrated? 'font-weight:bold':''}" /> 
     </rich:column> 
     <rich:column label="#{msg.action}"> 
      <f:facet name="header"> 
       <h:outputText value="#{msg.action}"></h:outputText></f:facet> 
      <a4j:commandLink id="editlink" oncomplete="#{rich:component('patientPanel')}.show()" reRender="a4jPatientPanel"> 
       <h:graphicImage value="/images/icons/PNG-24/Add.png" style="border:0" /> 
       <f:setPropertyActionListener value="#{patient}" target="#{user.patientsTab.patientPanel.patient}" /> 
      </a4j:commandLink> 
      <rich:toolTip for="editlink" value="Edit" /> 
     </rich:column> 

     <f:facet name="footer"> 
      <rich:datascroller renderIfSinglePage="false" maxPages="5" /> 
     </f:facet> 
    </rich:extendedDataTable> 

    </a4j:form> 

    <ui:include src="/pages/panels/patientPanel.xhtml" /> 
</ui:composition> 

उत्तर

5

दुर्भाग्य से, वहाँ इस कार्यक्षमता अनुकूलित करने के लिए कोई आसान तरीका है:

इस घटक है। वहाँ विकल्पों में इसे और अधिक उपयोगी बनाने के लिए, हालांकि इस प्रकार हैं:

  • <a4j:queue requestDelay="1000" ignoreDupResponce="true" /> - अपनी <a4j:form> या <a4j:region> और अपने onkeyup अनुरोध देरी और समूह में रखा जाएगा जगह इस। richfaces demo page देखें:

    • सत्य पर ignoreDupResponces स्थापना इनपुट अंदर टाइपिंग पर डोम अद्यतन की गिनती कम कर देता है। (अद्यतनों की शुरुआती राज्य गणना में अनुरोधों की गिनती के बराबर है)
    • कतार को अक्षम करने से पूरी तरह से असीमित अपडेट होते हैं। ध्यान दें कि अद्यतन न केवल सीधे क्रम में दिखाई दे सकते हैं और नतीजतन आप गलत स्ट्रिंग प्राप्त कर सकते हैं।
    • अधिक मूल्य के लिए अनुरोध देरी सेट करना तेजी से टाइपिंग पर अनुरोधों को कम करता है। (अधिक समान अनुरोध परिणाम में जोड़ दिया जाता है)
  • मैं वर्तमान में निम्नलिखित विकल्प का उपयोग कर रहा:

    <rich:dataTable (..some attributes..) 
        onkeypress="if (event.keyCode == 13) {document.getElementById('formId:tableId:j_id70fsp').blur(); return false;} else {return true;}" 
        ><!-- disabling submit-on-enter --> 
        <rich:column label="#{msg.name}" sortable="true" 
         filterBy="#{patient.profile.name}" filterEvent="onblur"> 
    </rich:dataTable> 
    

    आप कहाँ है j_id70fsp के लिए उत्पन्न आईडी देखने के लिए। यह गारंटी नहीं है कि यह हमेशा के लिए रहेगा, हालांकि।

    और नतीजा यह है कि कॉलम को एंटर कुंजी दबाकर फ़िल्टर किया जाता है, जो काफी उपयोगी है।

+0

एमएमएम मैंने कोशिश की है और यह काम नहीं कर रहा है। मैं प्रवेश दबाता हूं और कुछ भी नहीं होता है। अगर मैं इनपुट फ़ील्ड (ऑनब्लूर) के बाहर क्लिक करता हूं तो यह फ़िल्टर करता है। मैंने विस्तारितडेटाटेबल और डेटाटेबल के साथ प्रयास किया है। वही परिणाम – pakore

+0

अनुरोध में देरी करने का कोई तरीका है? "a4j: form" में स्पष्ट रूप से "अनुरोध डेले" देरी नहीं कर रहा है ... हालांकि प्रतिक्रिया के लिए धन्यवाद। – pakore

+0

आउट-ऑफ-द-बॉक्स नहीं। लेकिन कुछ कामकाज हो सकता है। मैं इसके बारे में सोचूंगा। – Bozho

2

Bozho सही है, लेकिन इसके बजाय getElementById का उपयोग कर के मैं इस स्क्रिप्ट का उपयोग पसंद करते हैं:

<rich:extendedDataTable onkeypress=" 
if (!event) { var event = window.event; } 
if (event.keyCode == 13) { 
    var targ; 
    if (event.target) targ = event.target; 
    else if (event.srcElement) targ = event.srcElement; 
    if (targ.nodeType == 3) targ = targ.parentNode; 
    if (targ) targ.blur(); 
    return false; 
} else return true;"> 

यह एफएफ, ईआई, सफारी (targ.nodeType == 3 बात) के साथ काम करना चाहिए।

1
function filterAllOnEnter(event) 
{ 
    if(event.keyCode == 13) 
    { 
     jQuery(".rich-filter-input").blur(); 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 

<rich:dataTable onkeydown="filterAllOnEnter(event)" ... > 

मेरे लिए काम करता है।

1

रिचफेसेस 3.3.3 के साथ, आपको प्रत्येक rich:column से फ़िल्टर ईवेंट (filterEvent="onblur") छोड़ना होगा और फिर आप कुंजी दबाए जाने पर केवल फ़िल्टर करने में सक्षम होंगे!

1

ऑनकीप ईवेंट रखें और कतार बनाएं और डेटाटेबल के साथ इसे संबद्ध करें।यह काम करता है लेकिन इसके अनियंत्रित:

<a4j:queue name="qFilter" ignoreDupResponses="true" size="1" requestDelay="600" sizeExceededBehavior="dropNext"/> 

<rich:dataTable ... eventsQueue="qFilter"> 
...