为什么在选择此代码中的项目后,城市组件不会被渲染?
<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
}
答案 0 :(得分:4)
从prependId="false"
移除<h:form>
。它会阻止<f:ajax>
根据相对客户端ID解析正确的组件。