JSF 2.0: повторный рендеринг / обновление одного элемента в пользовательском интерфейсе: повторите с использованием AJAX - PullRequest
5 голосов
/ 11 января 2011

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

<h:form id="form">    
    <ui:repeat id="repeatContainer" var="item" value="#{testBean.items}" varStatus="status">
        <h:outputText value="#{item.title}: "/>

        <!-- I want to re-render only a single one of these fields -->
        <h:outputText id="valueContainer" value="#{item.value}"/><br/>          
    </ui:repeat>
</h:form>

Теперь я хочу перерисовать (только) valueContainer определенного элемента в этом списке , используя AJAX (скажем, элемент с индексом 1). Я уже попробовал все эти комбинации без удачи:

<!-- Works, but renders all items: -->
<f:ajax render=":form"/>

<!-- This is what I actually want to achieve (does not work, comp. not found): -->
<f:ajax render=":form:repeatContainer:1:valueContainer"/>

<!-- Does not work (component not found): -->
<f:ajax render=":form:repeatContainer"/>

<!-- Does not work (component not found): -->
<f:ajax render=":form:repeatContainer:1"/>

<!-- Does not work (component not found): -->
<f:ajax render=":form:1"/>

<!-- Does not work (component not found): -->
<f:ajax render=":form:1:valueContainer"/>

<!-- Does not work (no error message, but does nothing): -->
<f:ajax render=":form:repeatContainer:valueContainer"/>

Мои требования включают в себя:

  • Мне нужно идентифицировать компонент для перерисовать с абсолютным идентификатором путь , потому что кнопка, которая запускает обновление где-то совершенно разные в компоненте дерево.
  • Перерисовка всей страницы или Форма (с использованием @all / @form) бесполезно для меня, потому что такого рода ставит под сомнение, почему я использую JSF / AJAX вообще ...
  • Мне нужно добиться того же самого с помощью ячеек PrimeFaces <p:dataGrid> (т.е. обновить только определенный подкомпонент конкретной ячейки), но я предполагаю, что это сводит к той же проблеме.

Полагаю, должно быть простое решение, которое я сейчас пропускаю?!

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

Эту проблему можно решить, поместив форму в простые грани p: outputPanel и установив для autoUpdate значение true

0 голосов
/ 11 января 2011

Похоже, это вызвано двумя отдельными ошибками в Mojarra 2.0.2.В следующем потоке обсуждается связанная с этим проблема: Как обратиться к родительскому элементу dataTable в пределах dataTable?

В моем случае я использую PrimeFaces <p:dataGrid> вместо <h:dataTable>, но этокажется, страдает от тех же симптомов.Ссылки просто терпят неудачу.Я предполагаю, что это связано с ошибкой в ​​UIComponent#findComponent() или базовых методах реализации JSF.

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

...