RequestContext.getCurrentInstance ().обновление не выполняется сразу

У меня есть простая таблица [форма:tabView:remTNtableID], со списком строк CFSnumbers, и когда я нажимаю кнопку, Я вызываюgetTelephoneNumbers(), чтобы заполнить ее, что занимает некоторое время.

Я хотел бы, чтобы таблица показать » загрузка..»пока ждал, и для этого очистил список, добавил «загрузка»..»в список и вызвал RequestContext.getCurrentInstance ().обновление («форма: tabView: remTNtableID»).

Но таблица не обновляется сразу «загрузка..»не видно, и только getTelephoneNumbers()по окончании вызова таблица обновляется.

Что случилось? Как заставить таблицу быть повторно отображенной немедленно?

private List<String> CFSnumbers;

@PostConstruct
public void init() throws GuiException {
    CFSnumbers = new ArrayList<String>();
}

public void getTelephoneNumbers() throws GuiException {
    CFSnumbers.clear();
    CFSnumbers.add("Loading..");
    RequestContext.getCurrentInstance().update("form:tabView:remTNtableID");
    try {
        ...
        CFSnumbers = ...
        RequestContext.getCurrentInstance().update("form:tabView:remTNtableID");
    } catch (Exception e) {
        CFSnumbers.clear();
        RequestContext.getCurrentInstance().update("form:tabView:remTNtableID");
    }

1 ответ

  1. Действие getTelephoneNumbers()представляет собой один запрос. Все обновления выполняются (отправить в ответ), когда ваш метод был полностью выполнен.

    То, что вы могли бы сделать, это разделить свое действие на часть сброса и часть тяжелой загрузки. Когда вы нажимаете кнопку, вызовите сброс, который сбрасывает и обновляет вашу таблицу, говоря » загрузка…». Когда сброс завершен, используйте a remoteCommandдля запуска фактической тяжелой загрузки и обновите таблицу по завершении.

    Итак, в вашем XHTML:

    <p:remoteCommand name="getTelephoneNumbersRemoteCommand"
                     action="#{yourBean.getTelephoneNumbers}"
                     update="remTNtableID"/>
    <p:commandButton ...
                     action="#{yourBean.preGetTelephoneNumbers}"
                     update="remTNtableID"
                     oncomplete="getTelephoneNumbersRemoteCommand()"/>
    

    И в ваших бобах:

    public void preGetTelephoneNumbers() {
        CFSnumbers.clear();
        CFSnumbers.add("Loading..");
    }
    
    public void getTelephoneNumbers() {
        try {
            ...
            CFSnumbers = ...
        } catch (Exception e) {
            CFSnumbers.clear();
        }
    }
    

    Обновление из вашего Бина больше не требуется, как это делается в XHTML.

    Похожие: