JSF, AJAX не отображается

Почему после выбора элемента в этом коде компонент городов не отображается?

<h:form prependId="false">
<h:panelGrid columns="1">
<h:selectOneMenu value="#{enumBeanStatus.selectedRegion}">
<f:selectItems id="selectItem" value="#{enumBean.regions}" var="region" itemLabel="#{region.label}"/>
<f:ajax listener="#{enumBean.loadCities}" render="cities"/>
</h:selectOneMenu>
<h:outputText id="cities" value="#{enumBean.cities}"/>
</h:panelGrid>
</h:form>

Он отправляет POST с выбранным регионом, модель обновляется правильно, но компонент <h:outputText> не отображается.

Один из фоновых компонентов:

@Named
public class EnumBean {

private List<Region> regions;
private List<City> cities;

@Inject 
EnumBeanStatus enumBeanStatus; //This one is CDI @ApplicationScoped & @Named




// Code...

public void loadCities(){
setCities(City.getCitiesByRegion(enumBeanStatus.getSelectedRegion()));
}

// Getters and Setters
}

person jacktrades    schedule 22.01.2013    source источник
comment
Обратите внимание, что GET после POST не ожидается ни в этом случае, ни в любом ответе AJAX, если уж на то пошло. Вам нужен только GET после POST, когда вы обновляете всю страницу — и это не происходит автоматически, вы должны вернуть viewName.jsf?faces-redirect=true.   -  person Elias Dorneles    schedule 22.01.2013
comment
@elias Итак, обновленная информация возвращается в ответе POST?   -  person jacktrades    schedule 22.01.2013
comment
Да, он приходит в ответ на запрос POST.   -  person Elias Dorneles    schedule 22.01.2013


Ответы (1)


Удалите prependId="false" из <h:form>. Он не позволяет <f:ajax> разрешить правильный компонент на основе относительного идентификатора клиента.

Смотрите также:

person BalusC    schedule 22.01.2013
comment
EnumBean был уничтожен после вызова loadCities(). Сделал глупое предположение, что это будет @ApplicationScoped, поскольку он вводил bean-компонент этой области. prependId в этом случае вообще не изменился. Извините за путаницу :( - person jacktrades; 22.01.2013