Метод onStart вызывается ПОСЛЕ метода onComplete

У меня есть кнопка, назовем ее «Button1»:

<p:commandButton icon="ui-icon-document"
  value="Button1"
  onstart="#{bean.populateDependancies(item)}"
  update="myDialog"
  oncomplete="dialogWidget.show();">
</p:commandButton>

Этот Button1 должен открыть dialog, но ДО его открытия я хочу, чтобы он заполнил цель раскрывающегося списка простых лиц в диалоговом окне некоторыми значениями (эта работа выполняется метод populateDependancies(item)).

Но на самом деле метод populateDependancies(item) вызывается, когда я закрываю диалоговое окно и нажимаю кнопку validateEdition cellEditor простых лиц (или даже кнопку отмены) (NB: Button1 помещается в столбец редактируемой таблицы данных).

Надеюсь, я ясно объяснил проблему... Пожалуйста, дайте мне знать, если что-то останется неясным


Вот структура моей страницы, возможно, это поможет: введите здесь описание изображения

и вот мой метод:

public void populateDependancies(Release release) {
    if (release != null) {
        if (rfcsDualListModel.getTarget() != null || !rfcsDualListModel.getTarget().isEmpty()) {
            rfcsDualListModel.setTarget(null);
        }
        List<Rfc> rfcDejaAssocies = release.getRfcs();
        rfcsDualListModel.setTarget(rfcDejaAssocies);
    }
}

person Sinda MOKADDEM    schedule 14.07.2014    source источник
comment
Попробуйте actionListener вместо onstart   -  person Jaqen H'ghar    schedule 14.07.2014
comment
Уже попробовал, и кнопка вообще не вызывает метод   -  person Sinda MOKADDEM    schedule 14.07.2014


Ответы (2)


onstart выполняет код JavaScript, как и oncomplete. #{bean.populateDependancies(item)} должно быть значением атрибутов action или actionListener.

edit: кроме того, необходимо использовать атрибут и значение process="@this", чтобы не отправлять всю форму.

person tt_emrah    schedule 14.07.2014
comment
Я уже пробовал action и actionListener вместо onStart, и ни у кого не получилось. Они не вызывают метод. Это очень странно, потому что я проверил сигнатуру метода, и все в порядке. - person Sinda MOKADDEM; 14.07.2014
comment
не могли бы вы вставить код всей формы, в которую вложена Button1? - person tt_emrah; 14.07.2014
comment
Я отредактировал свой вопрос и добавил структуру моей страницы xhtml... возможно, это даст некоторые разъяснения. - person Sinda MOKADDEM; 14.07.2014
comment
да, использование process="@this" было моей второй альтернативой. этот атрибут определяет, какие поля будут отправлены с этим запросом. если вы не установите для него значение @this, вся форма, в которую вложена кнопка, будет отправлена ​​на сервер. в этом случае, это портит много вещей. - person tt_emrah; 14.07.2014

Проблема решена с помощью атрибута actionListener И process="@this" команды commandButton.. Но я, честно говоря, не знаю, почему это сработало, только добавив process="@this".. Если кто-то знает причину... пожалуйста, дайте мне знать. Спасибо всем.

person Sinda MOKADDEM    schedule 14.07.2014
comment
В следующий раз опубликуйте MCVE, и вы быстрее получите лучшую помощь. См. также нашу информационную страницу jsf. - person perissf; 14.07.2014
comment
Спасибо @perissf, но я подумал, что кода, который я разместил, достаточно, чтобы проиллюстрировать проблему. Не так ли? - person Sinda MOKADDEM; 14.07.2014
comment
По умолчанию используется @form, так что это звучит очень странно. Попробуйте удалить его снова - person Jaqen H'ghar; 14.07.2014
comment
Идея может заключаться в том, что при использовании @form одно из других полей ввода вызывает исключение, в результате чего метод не запускается. - person Jaqen H'ghar; 14.07.2014