как перерендерить a4j:commandLink после завершения действия

у меня есть очень простой код здесь:

<a4j:commandLink action="#{ticketAboxEventHelper.removeAboxTicket(ticketAbox)}"
                             onclick="if(!confirm('Are you sure ... ?')) return false;"
                             reRender="aboxlistpanel">
                        <h:graphicImage alt="Delete" url="../../img/dialog-error-5.png" title="Delete" />
                        <a4j:support event="oncomplete" 
                                     action="#{editTicketNewAction.testRerender()}" 
                                     reRender="aboxlistpanel"
                                     />
</a4j:commandLink>

При переходе по ссылке система должна

  1. спросить, подтвержден ли пользователь
  2. сделать действие
  3. перерисовать панель aboxlist

Теперь моя проблема в том, что повторная визуализация происходит до завершения действия. есть идеи, как это можно сделать правильно?


person Ikthiander    schedule 06.06.2013    source источник
comment
Вы пытались удалить <a4:support> из <a4j:commandLink>?   -  person Luiggi Mendoza    schedule 06.06.2013
comment
да, он сначала перерисовывает, а затем выполняет действие, но я хочу сначала выполнить действие, а затем перерисовать   -  person Ikthiander    schedule 06.06.2013
comment
Это действительно странно. Порядок выполнения: onclick, action, reRender, oncomplete. Вы уверены, что нет другого компонента, который также запускает повторную визуализацию aboxlistpanel или всей страницы?   -  person Luiggi Mendoza    schedule 06.06.2013
comment
<a4j:log /> может помочь вам увидеть, где блокируется AJAX...   -  person Alexandre Lavoie    schedule 06.06.2013
comment
action="#{editTicketNewAction.testRerender()}" Это не допустимый JSF 1.2, я прав?   -  person Alexandre Lavoie    schedule 06.06.2013


Ответы (2)


Ваши методы действий недействительны для JSF 1.2, и вам не нужен <a4j:support>. Поскольку вы хотите передать параметр, вы должны использовать <f:attribute /> и actionListener :

<a4j:commandLink actionListener="#{ticketAboxEventHelper.removeAboxTicket}" onclick="if(!confirm('Are you sure ... ?')) return false;" reRender="aboxlistpanel">
    <h:graphicImage alt="Delete" url="../../img/dialog-error-5.png" title="Delete" />
    <f:attribute name="ticket" value="#{ticketAbox}" />
</a4j:commandLink>

Ваш bean-метод будет выглядеть так:

public void removeAboxTicket(ActionEvent event)
{
    TicketAbox ticket = (TicketAbox)event.getComponent().getAttributes().get("ticket");

    // Your business logic
}

Дополнительная информация:

person Alexandre Lavoie    schedule 06.06.2013
comment
нет, все в порядке, я использую выражения для шва 2 и jboss el, поэтому они работают нормально. но все равно спасибо за ваш вклад - person Ikthiander; 06.06.2013

Решено. Я завернул оскорбительный код JSF в a, и все заработало, как и ожидалось. связанный с ответом ‹a4j:commandLink› Не перерисовывается. Сначала я решил это, а потом узнал, что кто-то еще решил это таким же образом. Хм....

person Ikthiander    schedule 07.06.2013