jsf 2.0 f: идентификатор рендеринга ajax не найден - PullRequest
5 голосов
/ 10 мая 2011

При нажатии кнопки Сохранить во всплывающем окне (pp1) список проектов обновляется.Но когда нажимаете кнопку обновления в списке проектов, идентификатор рендера: form1: pp1 отсутствует, возникает ошибка при его рендеринге.Если сделать render = "@ all", это работает, но это не хорошо.(ошибка: <f:ajax> содержит неизвестный идентификатор ': form1: pp1')

<h:form id="form1" prependid=false>
<h:panelGroup id="projects">
<ui:repeat var="action" value="#{dadadada}" varStatus="status">
<h:commandButton value="Save">
//gives id not found error
<f:ajax event="click" execute="@form" render=":form1:pp1" listener="#{fsfsfsfsfs}" />
</h:commandButton>
</ui:repeat>

</h:panelGroup> // project panel group

//popup
<h:panelGroup id="pp1">
<div id="popup2" class="popup_block">

//save button in the popup
<div class="popupBody_save2">
            <h:commandButton  image="resources/images/saveBtn.gif" value="Save">
             <f:ajax event="click" execute="@form" render="projects" listener="#{dfsfssfs}" />
            </h:commandButton>
        </div>

</div>
</h:panelGroup>

</h:form>

Ответы [ 2 ]

6 голосов
/ 10 мая 2011

:form1:pp1 не будет работать, так как у вас есть prependId="false" в форме. pp1 не будет работать, так как он ищет компонент в той же области видимости, что и <ui:repeat>, который сам по себе является UINamingContainer компонентом.

Откройте страницу JSF в веб-браузере, щелкните правой кнопкой мыши и Просмотреть исходный код , чтобы получить сгенерированный HTML. Найдите элемент HTML, который генерируется <h:panelGroup id="pp1">. Это должно выглядеть примерно так

<span id="foo:bar:pp1">

Вам необходимо использовать точно этот идентификатор с префиксом : в атрибуте render.

<f:ajax render=":foo:bar:pp1">

Если есть часть с автоматически сгенерированным идентификатором, такая как j_id0, то вам нужно дать рассматриваемому родительскому компоненту фиксированный идентификатор.

0 голосов
/ 10 мая 2011

Если вы используете prependId=false, то идентификатор вашей PanelGroup будет pp1 вместо form1:pp1. (Предположим, в вашем атрибуте «prependID» есть опечатка вместо «prependid»)

...