почему p: commandButton внутри p: диалог не запускает actionListener?

<h:form prependId="false">

<p:dialog modal="true">

<p:commandLink ajax="true" value="ok" actionListener="Bean.listenerMethod"/>

</p:dialog>

</h:form>

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


person Selvin    schedule 19.03.2011    source источник
comment
Это точный код? Там очень очевидная ошибка, но я бы не хотел играть за Капитана Очевидность.   -  person BalusC    schedule 19.03.2011
comment
Извините, я поставил commandLink вместо commandButton. это ошибка BalusC?   -  person Selvin    schedule 19.03.2011
comment
Нет, ваш actionListener не является выражением метода. Это обычная струна.   -  person BalusC    schedule 19.03.2011
comment
Ранее я использовал эту нотацию (Bean.listenerMethod) для вызова слушателей. И это сработало. Вы имеете в виду, что правильная запись Bean.listenerMethod()?   -  person Selvin    schedule 19.03.2011


Ответы (3)


Вам нужно объявить его как выражение метода EL, а не как простую строку.

actionListener="#{Bean.listenerMethod}"

Чтобы быть уверенным, #{Bean} должен быть допустимым управляемым компонентом с именем управляемого компонента "Bean", который, в свою очередь, содержит следующий метод

public void listenerMethod(ActionEvent event) {
    // ...
}

где ActionEvent из пакета javax.faces и не тот java.awt.

Если это все еще не работает, то это вызвано чем-то другим. Например. форма вложена, атрибут rendered оценивается как false и т. д. Обзор см. в разделе этот ответ.

person BalusC    schedule 19.03.2011
comment
Спасибо, мистер Шольц › Мой мозг был обезвожен :) Я пробовал все остальное. - person Selvin; 19.03.2011
comment
Я попробовал, как вы сказали, и поставил #{Bean.listenerMethod}, но теперь он также не запускает слушателя :( - person Selvin; 19.03.2011
comment
BalusC, могу ли я открыть еще один вопрос, касающийся этой проблемы, с более подробной информацией. Не могли бы вы помочь? - person Selvin; 19.03.2011
comment
Это было некоторое время назад с PrimeFaces, и их документация больше не бесплатна, но разве форма не должна идти в диалоге? Также убедитесь, что вы не вкладываете формы друг в друга. - person BalusC; 19.03.2011
comment
Я проверил документацию PrimeFaces 2.1 и их демонстрацию. Нигде не упоминается не использовать формы внутри p:dialog или p:confirmDialog. В любом случае спасибо за подсказки :) - person Selvin; 19.03.2011
comment
Ваша подсказка была правильной BalusC. Я неосознанно вложил форму в форму. Вот почему ActionListener не был запущен. Теперь это работает. Большое спасибо.!!! - person Selvin; 19.03.2011
comment
@BalusC Не могли бы вы ответить на этот вопрос: stackoverflow.com/questions/26803879/ - person GingerHead; 09.11.2014

Вы должны использовать <h:commandLink action="... /> вместо <p:commandLink actionListener="... />

Пример:

<h:commandLink id="elimina"
   action="#{listaBonificiModel.eliminaSelezionato()}"
   update="@(form)" oncomplete="PF('bonificoDialog').hide()"
   value ="Elimina" />
person ciroBorrelli    schedule 16.03.2015

Пытаться

<h:form id="mainform">
    __________
    __________
    <p:dialog id="test" widgetVar="Testing">
       <h:form>
          <h:panelGrid columns="1">
             _________
             _________
          </h:panelGrid>
          <p:commandLink ajax="true" update="mainform" process="@all" value="ok" actionListener="#{Bean.listenerMethod}" oncomplete="Testing.hide()"/>
      </h:form>
    </p:dialog>
</h:form>

Спасибо

person Praveenkumar_V    schedule 13.10.2012