Обновление данных Ajax не выполняется, если оно запускается из записи того же самого элемента данных?

Я бы хотел добиться этого:

Внутри моей таблицы данных, в одной из ячеек, я могу запустить действие, которое может обновить саму таблицу данных, щелкнув commandLink.

Но я испытал следующее:

После запуска действия все работает, как задумано, но не хватает только одного, а именно: он не обновляет таблицу данных.


Мой отрывок для ссылки выглядит следующим образом (да, я знаю, что использование @all не очень хорошая идея, но это сделано для целей тестирования):

<p:column>
    <p:commandLink value="Undo"
        process="@all"
        action="#{tInputBean.undoRemoveRecord(rpbDetail)}" 
        update="@all"
        rendered="#{tInputBean.isRemoveRecord(rpbDetail)}"
    />
</p:column>

И я протестировал дальше, поместив кнопку за пределами, внутри фасета заголовка таблицы данных, которая ничего не делает, а только обновляет сетку:

<p:commandButton value="Refresh Data" update="gridRPBDetails" />

Итак, шаги стали:

  1. После нажатия на ссылку сетка не обновляется.
  2. Нажатие кнопки обновления фактически обновляет сетку, ссылка исчезает (из-за отображаемого атрибута), что означает, что все фазы и состояния в моем JSF Bean уже верны. Сбой только на этапе обновления просмотра.

То, что я хотел бы достичь, очень просто: при нажатии на ссылку, сама ссылка обновляется и исчезает (из отображаемого атрибута)

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

Есть идеи по решению этой проблемы?


В любом случае, я хочу поделиться ответом после нажатия на ссылку «Отменить» в firebug:

<?xml version='1.0' encoding='UTF-8'?>
<partial-response><changes><update id="javax.faces.ViewState"><![CDATA[673421645734309925:-3805206326573204566]]></update></changes><extension primefacesCallbackParam="validationFailed">{"validationFailed":false}</extension></partial-response>

Я использую tomcat 7, и это мои зависимости:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.0.4-b09</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.0.4-b09</version>
    <scope>compile</scope>
</dependency>

ОБНОВИТЬ :


Я понимаю, что в этом посте нет простого примера, и его будет сложно протестировать и объяснить, поэтому я сделал простой пример, который я опубликовал здесь.

Ничего страшного, если модератор считает, что этот пост следует удалить, и делает это.

Спасибо !


person Albert Gan    schedule 09.05.2011    source источник
comment
@Tim Post: Пожалуйста, отмените удаление моего ответа, чтобы я мог поставить галочку;) Спасибо!   -  person Albert Gan    schedule 11.08.2011


Ответы (1)


Где вы обновляете запись? Просто введите процесс и обновление не будет. Кроме этого, не используйте @all. Если ваша таблица данных уже находится внутри формы, она не будет обновляться в этом случае @all. Использовать этот.

Я хотел бы помочь вам, но я не знаю, что вы пытаетесь сделать в конце. Чтобы обновить таблицу данных, вам необходимо иметь прослушиватель действия или атрибут действия, который будет обрабатывать обновление. Тогда другой вопрос, каковы возможности вашего bean-компонента? Если его сеанс ограничен, вам нужно изменить это, чтобы просмотреть область.

Поместите сюда свой код, и тогда я смогу объяснить это намного лучше.

person Bytekoder    schedule 08.08.2011
comment
Здравствуйте .. я тоже поставил сюда свой ответ. Спасибо за помощь ! - person Albert Gan; 10.08.2011