Ваша проблема в том, что эти два компонента являются частью дерева компонентов JSF для этой страницы. И даже если они не могут отображаться одновременно, они имеют один и тот же идентификатор, который не разрешен JSF.
Я вижу три способа решения вашей проблемы:
Первое решение: Определить два разных идентификатора
Второе решение: Вы можете, как объяснил Уэйн Янг, использовать NamingContainer, который будет добавлять префикс ID к идентификатору NamingContainer.
Третье решение: Используйте только один <h:selectOneListbox/>
, а затем внесите изменения в код Java.
<h:selectOneListbox id="lang" size="5" disabled="#{!MbInstitution.managingNew}" value="#{MbInstitution.node.lang}" valueChangeListener="#{MbInstitution.changeLanguage}">
<a4j:support event="onchange" reRender="shortDesc, fullDesc" rendered="#{MbInstitution.view}"/>
<f:selectItems value="#{MbInstitution.languages}"/>
</h:selectOneListbox>
Java-код:
public List<SelectItem> getLanguage() {
if (isView()) {
return getLanguagesByInstitute();
} else {
return getAvailableLanguages();
}
}
public void changeLanguage(ValueChangeEvent evt) {
if (!isView()) {
return;
}
...
}