Эта проблема имеет две стороны:
Вы указываете абсолютный идентификатор клиента :details
, в то время как элемент для повторного рендеринга находится внутри того же UINamingContainer
parent, поэтому JSF не сможет найти его в дереве компонентов.Вам необходимо указать относительный идентификатор клиента details
.
Вы указали идентификатор в простом элементе HTML вместо простого JSF-компонента, поэтому JSF не сможетнайдите его в дереве компонентов.Вам нужно использовать настоящий компонент JSF.Вам нужно заменить <div>
на <h:panelGroup layout="block">
.
Итак, исправьте это оба:
<h:form>
<div id="options">
<h:selectOneRadio value="#{cc.attrs.radioItem}" >
<f:selectItems value="#{cc.attrs.radioItems}" />
<f:ajax render="details" />
</h:selectOneRadio>
</div>
<h:panelGroup id="details" layout="block">
<h:graphicImage value="#{cc.attrs.compImage}"/>
<h:outputText value="#{cc.attrs.compSpecification}"/>
</h:panelGroup>
</h:form>
То, что он работает с @form
и @all
просто потому, что JSF может найти элемент, подлежащий повторной визуализации, относительно компонента, для которого было вызвано действие ajax, а именно родительский компонент UIForm
и UIViewRoot
соответственно.