Вертикальный фильтр Richfaces: Как запустить событие во вводный ключ

У меня есть a rich:extendedDataTable и я использую фильтрацию столбца. Я хочу, чтобы фильтр был запущен, после того как пользователь вводит "вводный" ключ, но в JavaScript нет такого события.

Я хочу сделать так потому что, если я использую события такой как onkeyup Я получаю слишком много запросов, и у меня есть проблемы из-за этого. Я использую richfaces 3.3.0GA и facelets.

Это - компонент:

<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
задан kay 16 July 2012 в 18:24
поделиться

1 ответ

К сожалению, нет простой способ настроить эту функцию. Однако есть варианты, чтобы сделать его более удобным:

  • - поместите это в свою или и ваши onkeyup запросы будут отложены и сгруппированы. См. демонстрационную страницу richfaces :

    • Установка ignoreDupResponces в true уменьшает количество обновлений DOM при вводе внутри ввода. (в исходном состоянии количество обновлений равно количеству запросов)
    • Отключение очереди вызывает полностью асинхронные обновления. Обратите внимание, что обновления могут появляться не только в прямом порядке, и в результате вы можете получить неправильную строку.
    • Установка большего значения задержки запроса уменьшает количество запросов при быстром вводе. (В результате объединяются более похожие запросы)
  • В настоящее время я использую следующую альтернативу:

       
      
      
     

    Где вам нужно см. сгенерированный идентификатор для j_id70fsp . Однако не гарантируется, что он останется таким навсегда.

    И в результате столбец фильтруется при нажатии клавиши ввода, что довольно удобно.

5
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: