У меня есть два часа: selectOneMenu (1: Страны, 2: Города). Мне нужно загрузить все города из одной выбранной страны в города selectOneMenu с помощью ajax. Когда я изменяю значение стран selectOneMenu, мои города selectOneMenu принимает нулевое значение из countryBean.selectedCountry.Загрузка h: selectOneMenu в зависимости от другого h: selectOneMenu value
<h:panelGrid columns="2">
<h:outputLabel for="countries" value="Countries: " />
<h:selectOneMenu converter="omnifaces.SelectItemsConverter"
id="countries" required="true" value="#{countryBean.selectedCountry}">
<f:selectItem itemLabel="Choose country" />
<f:selectItems value="#{countriesBB.findAllCountries()}"
var="country" itemLabel="#{country.name}" />
<f:ajax event="change" render="cities" />
</h:selectOneMenu>
<h:outputLabel for="cities"
value="Cities: " />
<h:selectOneMenu converter="omnifaces.SelectItemsConverter"
id="cities" required="true"
value="#{cityBean.selectedCity}">
<f:selectItem itemLabel="Choose city" />
<f:selectItems value="#{cityBean.findAllCitiesByCountry(countryBean.selectedCountry)}"
var="city" itemLabel="#{city.name}" />
</h:selectOneMenu>
</h:panelGrid>
Это метод, найти города:
public List<city> findAllCitiesByCountry(Country country) {
List<City> cities = null;
try {
cities = citiesService.findAllCitiesByCountry(country);
} catch (Exception exception) {
logger.debug("Error finding cities.", exception);
}
return cities;
}
Я получаю NullPointerException, потому что countryBean.selectedCountry всегда нуль. Каков правильный способ сделать это?
Я думаю, что стоит повторить объем бобов имеет важное значение, как упоминалось BalusC. @RequestScoped, например, приведет к вызову нового экземпляра класса при каждом отправке формы. Если произошел сбой проверки и вы вернетесь на ту же страницу, вы начнете сталкиваться с проблемами – Amin