Как сначала загрузить страницу и прочитать базу данных

HTML-форма имеет несколько текстовых полей и раскрывающийся список. Выпадающий список имеет огромные значения и требует много времени для извлечения из базы данных.

Итак, я хочу сначала загрузить страницу, и пока пользователь заполняет форму (текстовые поля), я хочу загрузить раскрывающийся список (без его ведома :-)).

Но без какого-либо триггера события, как мне снова позвонить в базу данных?

Я использую JSF с RichFaces, Servlet.

Следующий код не работает

   <h:selectOneMenu value="#{obj.selectedValue}">
      <f:selectItems value="#{obj.allValues}" />
      <a4j:support selfRendered="true" action="#{bean.action}"/>
   </h:selectOneMenu>

Спасибо,


person crazyTechie    schedule 09.01.2010    source источник


Ответы (4)


Внизу страницы поместите следующее:

<a4j:jsFunction name="yourJsFunction" action="#{bean.fetchSelectItems}" 
     reRender="yourDropdown" />

window.onload = yourJsFunction();
person Bozho    schedule 11.01.2010

+1 за использование Ajax, но если у вас очень большое количество значений, тогда вы можете рассмотреть возможность использования раскрывающегося списка с автоматическим завершением, когда пользователь начинает вводить то, что ему нужно, и после того, как он набрал несколько символов, вы пинаете отключите свой запрос ajax и просто загрузите те запросы, которые соответствуют.

взгляните на "предложение Google", если вы хотите увидеть это в действии

-Туз

person phatmanace    schedule 09.01.2010

Как уже упоминалось, вы можете использовать AJAX для асинхронной загрузки элементов раскрывающегося списка, но я бы предложил изменить дизайн формы, чтобы не требовалось огромное раскрывающееся меню. Возможно, позволить пользователю искать правильное значение на предыдущем или последующем экране? Длинные выпадающие списки не просты в использовании, так как требуют много прокрутки, и может быть трудно найти правильное значение в большом списке.

person AUSteve    schedule 10.01.2010

Вам придется использовать AJAX. При загрузке страницы отображается пустое поле выбора. Затем напишите JavaScript, который вызовет некоторый URL-адрес на вашем сервере, который вернет параметры для поля выбора. И когда вы получите это, просто заполните поле выбора этими значениями. Имейте в виду, что ваша форма будет бесполезна для тех, у кого нет JavaScript.

person Jan Hančič    schedule 09.01.2010
comment
но вызов URL перезагрузит страницу? не так ли? - person crazyTechie; 09.01.2010
comment
Вы должны использовать AJAX (как я уже сказал), и поэтому все это происходит в фоновом режиме, и пользователь не знает, что вы извлекаете некоторые дополнительные данные... - person Jan Hančič; 09.01.2010