Не удается обновить Ajax для обработки данных, если оно инициировано из записи того же источника данных? - PullRequest
1 голос
/ 09 мая 2011

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

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

Но то, что я испытал, это:

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


Мой отрывок выглядит так для ссылки (да, я знаю, что использование @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 уже верны. Сбой только фазы просмотра обновления.

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

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

Есть идеи, как решить эту проблему?


В любом случае, я хочу поделиться ответом после нажатия на ссылку «Отменить» из 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>

ОБНОВЛЕНИЕ:


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

Это нормально, если модератор считает, что это сообщение следует удалить, и сделайте это.

Спасибо!

1 Ответ

0 голосов
/ 09 августа 2011

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

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

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

...