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, тъй като инжектира боб с този обхват. prependId изобщо не се промени в този случай. Извинете за объркването :( - person jacktrades; 22.01.2013