Используйте абсолютный идентификатор клиента вместо относительного идентификатора клиента.
При условии, что у вас
<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" ... />