p: commandButton не запускает действие - PullRequest
3 голосов
/ 25 ноября 2011

Вот проблема: actionlistener не хочет запускаться

@ManagedBean(name="hotelsController")
@SessionScoped
   public class HotelsController implements Serializable {
      public void requestHotelAvail(ActionEvent event) {
         request = new Request(df.format(arrivalDate), df.format(departureDate));
      }
   }

и xhtml

<h:panelgroup id="rooms"/>
<h:form  id="hotelSearch">
            <p:commandButton actionListener="#{hotelsController.requestHotelAvail}" value="submit" update="rooms" />
</h:form>

Я перепробовал все, что мог найти, изменил @managedbean на @component, установил import на import javax.faces.event.ActionEvent;

Но все равно ничего не срабатывает.

Форма находится в p:accordion и при использовании с h:commandbutton работает нормально

РЕДАКТИРОВАТЬ : извините за ввод в заблуждение. номера обновляются после щелчка, но actionListener не запускается. поэтому комнаты не получат никаких новых данных. Важный код в requestHotelAvail необходимо запустить перед обновлением номеров, а его нет.

EDIT2 : PrimeFaces 2.2.1 - я прочитал целое руководство для простых лиц, но нет никакого объяснения этому, поскольку я сделал все, что в нем говорится

Я пытался использовать action вместо actionListener без ActionEvent, но он никогда ничего не делал. использование <h:commandbutton action="#{hotelscontroller.requestHotelAvail}"/> прекрасно работает, но я хочу, чтобы движок ajax обновлял только эту rooms panelgroup

ОБНОВЛЕНИЕ : Теперь это работает. Форма не может быть в <p:accordion>, но почему и как ее там включить? Форма сейчас я буду работать без нее.

Ответы [ 2 ]

3 голосов
/ 25 ноября 2011

Я подозреваю, что поведение h: commandLink отличается от обработки ajax / non-ajax.

По умолчанию - если вы не используете f: ajax - h: commandLink не является ajax и вся страница перерисовывается.Primefaces p: commandLink использует ajax, и вы указываете комнаты как компонент для обновления.В вашем случае комнаты - это внешняя форма, поэтому ее следует рассматривать как: комнаты (обратите внимание на двоеточие), а не просто комнаты.

update: вы пробовали ajax с h: commandLink?Это будет:

<h:commandButton action="#{hotelscontroller.requestHotelAvail}" value="submit">
  <f:ajax render=":rooms"/>
</h:commandButton>

Также я не очень знаком с простыми лицами, но, возможно, вы можете попытаться явно указать компонент для обработки с дополнительным process="@this" - хотя я бы предположил, что это будет по умолчаниюбазовая библиотека.

0 голосов
/ 04 октября 2013

Вы пытаетесь проверить ответ:

Открыть Chrome или Firefox -> Проверить элемент -> Сеть и выполнить вызов ajax.

enter image description here

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