JSF Ajax вопрос - PullRequest
       2

JSF Ajax вопрос

0 голосов
/ 28 января 2011

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

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 28 января 2011

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

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

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

Она всегда обновляла бы компонент с идентификатором клиента 'panelConistingDatatable' после выполнения метода bean.search ().

Также, еслиВы хотите уведомить своих пользователей об ожидающем запросе ajax, используйте p: ajaxStatus (http://www.primefaces.org/showcase/ui/pprAjaxStatus.jsf)

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

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

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

0 голосов
/ 28 января 2011

Для этого вы можете использовать <f:ajax>. У него есть атрибут render, который должен указывать (относительный или абсолютный) идентификатор клиента компонента, который вы хотите перерисовать. Начиная с : означает абсолютное значение (как в сгенерированном HTML), в противном случае оно относительно текущего контейнера именования (например, <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);
    }

    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...