Ссылка на идентификатор в атрибуте for для p: radioButton - PullRequest
0 голосов
/ 16 января 2012

Можно ли ссылаться на идентификатор, который идентифицирует компонент, который является дочерним для контейнера именования родителей-родителей?

Например:

<div class="browserDiv"
            id="browserObjects">
            <p:selectOneRadio id ="selectedFolder" value="${cc.attrs.value.selectedObjectPath}" layout="custom">
                <f:selectItems value="${cc.attrs.value.objectList}"
                                var="object" itmeValue="${object.path}" itemLabel=""/>
            </p:selectOneRadio>

            <table>
                <ui:repeat var="object" value="${cc.attrs.value.objectList}" id ="repeat" varStatus="status" >
                        <tr>
                            <td class="checkBoxCell">
                                <p:radioButton id="radioButton_${object.path}" for="selectedFolder" itemIndex="#{status.index}"/>
                            </td>
                        </tr>
                </ui:repeat>
            </table>

        </div>

Я хочу сослаться на идентификатор selectedFolder из атрибута for в <p:radioButton>. Но поскольку <ui:repeat> является NamingContainer, selectedFolder лежит в другом NamingContainer, и я не понимаю, как на это можно сослаться. Можно ли написать что-то вроде for="../selectedFolder"?

Я не могу использовать абсолютные id-ссылки, потому что это часть составного компонента. Я также пытался использовать prependId="false" в <ui:repeat>, но это не сработало.

1 Ответ

0 голосов
/ 16 января 2012

Используйте абсолютный идентификатор клиента вместо относительного идентификатора клиента.

При условии, что у вас

<h:form id="form">
    <p:selectOneRadio id="radio" ...>
        ...
    </p:selectOneRadio>
</h:form>

, тогда его абсолютный идентификатор клиента будет form:radio.Это именно то значение, которое вы видите в сгенерированном источнике HTML.Чтобы сослаться на него из другого контейнера именования, вам нужно поставить перед ним префикс (по умолчанию) разделителя именования контейнеров :, чтобы он стал :form:radio.Таким образом, это должно сделать:

<p:radioButton for=":form:radio" ... />

Не связано с конкретной проблемой, вы используете ${} вместо #{} почти везде.Хотя ${} может нормально работать в значениях только для отображения, оно не будет работать вообще, когда вы отправляете форму.Вам действительно нужно вместо этого #{}.Он не только делает get, но и set, в то время как ${} делает только get.Просто придерживайтесь #{} на всех страницах JSF.

См. Также:


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

<p:radioButton for=":#{cc.clientId}:radio" ... />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...