2011-01-28 2 views
0

Прежде всего, я хочу извинить за последний вопрос. Не знаю, как работает система здесь :-)JSF Ajax вопрос

У меня есть вопрос, касающийся JSF и Ajax. Мое веб-приложение динамично. Вся страница загружается только один раз в начале. Когда пользователь перемещается по меню, только центральная таблица изменяет его вывод.

У меня есть некоторые компоненты, такие как простые или простые кнопки, которые выполняют функции в моем bean-компоненте. Мое веб-приложение подключается к серверу бэкэнд, и информация передается между JSF и бэкэнд и затем отображается пользователям.

Когда пользователь нажимает, например. в функции «Поиск» результаты должны отображаться в моем формате данных. Будет выполнен метод {# searchBean.doSearch}. Сообщение направляется в бэкэнд с информацией о пользователях. Через несколько секунд JSF получает эту информацию. Это мой принцип.

Теперь я хочу сделать вручную DataTable и сказать ему «все результаты поиска были получены. Пожалуйста, обновите результаты» Можно ли вынести вручную компоненты с помощью JSF? Или есть другое решение.

И мой второй вопрос. Когда сообщение отправляется на бэкэнд, для получения результатов может потребоваться несколько секунд, . Каков наилучший способ отображения сообщения «Ожидание» пользователю (с диалогом)? Когда я получаю результаты от моего бэкенда, я хочу вручную обновить свои компоненты, чтобы полученные данные были отображены, а затем мне нужен способ удалить это диалоговое окно «Ожидание».

Надеюсь, вы понимаете, чего я хочу, потому что мой английский не самый лучший :-) Я не знаю, как начать решать свои проблемы ... Я думаю, мне просто нужен способ обновления элементов HTML через JSF и рендеринг компонентов вручную. Но я ничего не нашел в Интернете. Может, я искал неправильные вещи?

С уважением, Джонни

ответ

0

Вы можете использовать <f:ajax> для этого. Он имеет атрибут render, который должен указывать на (относительный или абсолютный) идентификатор клиента компонента, который вы хотите повторно отобразить. Начиная с : означает абсолютное (как в сгенерированном HTML), в противном случае оно относится к текущему naming container (например, <h:form>).

Вот простой простой пример:

<h:form> 
    <h:inputText value="#{bean.query}" /> 
    <h:commandButton value="Search" action="#{bean.search}"> 
     <f:ajax execute="@form" render=":results" /> 
    </h:commandButton> 
</h:form> 

<h:panelGroup id="results"> 
    <h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}"> 
     <h:column>#{result}</h:column> 
    </h:dataTable> 
</h:panelGroup> 

Где Bean выглядеть следующим образом:

@ManagedBean 
@ViewScoped 
public class Bean implements Serializable { 

    private String query; 
    private List<Result> results; 

    public void search() { 
     results = resultDAO.list(query); 
    } 

    // ... 
} 
+0

Спасибо, ребята! Я собираюсь попробовать эти методы сейчас. – Johnny

1

Поскольку вы используете Primefaces (который был построен с предварительным 2.0 JSF в виду), вы может использовать более конкретный способ обработки Ajax (чем тот, который описан BalusC).

Вы заметите, что большинство компонентов имеют атрибут, называемый «обновлением». Вы используете этот атрибут, чтобы сообщить JSF, какие компоненты следует обновлять после того, как что-то произойдет. Например, если бы вы кнопка помечены как:

<p:commandButton value='test' action='#{bean.search}' update='panelContainingDatatable' /> 

Он всегда будет обновить компонент с идентификатором клиента в «panelContainingDatatable» после выполнения боба.search().

Кроме того, если вы хотите, чтобы уведомить пользователей о АЯКС запроса в ожидании, использование р: ajaxStatus (http://www.primefaces.org/showcase/ui/pprAjaxStatus.jsf)

Будьте осторожны, есть предостережений:

  • мы говорим о идентификатора клиента здесь, а не идентификатор компонента (лучше всего искать его в источниках страниц)

  • Есть краевые случаи при смешивании ajax с ui: repeat и h: dataTable; честно говоря, лучше всего пытаться избежать таких случаев, чем решать их. Они исходят из ошибок в реализациях и из неоптимальных проектных решений относительно ui: repeat.

+0

Спасибо, ребята! Я собираюсь попробовать эти методы сейчас. – Johnny

+0

Ах, я забыл/забыл, что он использовал PrimeFaces. В самом деле, '' будет в основном заменой ' '. – BalusC