Ajax + JSF 2 раза кликают после первого клика - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть dataTable со столбцом с именем DELETE (это ссылка), в котором есть прослушиватель.Когда я щелкаю по нему первый раз (нажимаю 1), он удаляет строку (как и ожидалось), но когда я пытаюсь сделать это с другой строкой, после этого ничего не происходит (щелкните 2).На самом деле, где бы я ни щелкнул дальше, ничего не происходит.Я должен щелкнуть в другой раз (нажмите 3), чтобы заставить его работать.Я не хочу этого.

Внимание: метод "delete ()" в my_user не достигается после "click 2".

Вот код для столбца:

<h:column>
    <f:facet name="header">#{lng.del}</f:facet>
    <h:form>
        <h:commandLink action="#">
            <f:ajax event="click" listener="#{my_user.delete}" render="@all" />
            <h:graphicImage name="delete.png" library="images" styleClass="tableIcon" />
        </h:commandLink>
    </h:form>
</h:column> 

1 Ответ

2 голосов
/ 14 сентября 2011

У вас есть несколько форм внутри таблицы. Когда вы повторно визуализируете другую форму из формы с помощью ajax, ее состояние просмотра будет потеряно, и, следовательно, 1-й щелчок не будет выполнен. Этот щелчок, однако, заботится о том, чтобы форма возвращала состояние просмотра, поэтому второй щелчок работает.

Технически, вам нужно перерисовать только содержимое другой формы, но это невозможно в данном конкретном случае использования. Лучше поставить <h:form> вне <h:dataTable>, чтобы у вас была одна форма с общим состоянием просмотра.

<h:form>
    <h:dataTable>
        ...
    </h:dataTable>
</h:form>

Если ваша страница также содержит другие формы, я бы предложил отображать только текущую форму вместо всех, в противном случае любые действия с этими формами также будут неудачными.

<f:ajax event="click" listener="#{my_user.delete}" render="@form" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...