Слушатель не будет вызван, если выбранный элемент не может быть обработан. Вы поместили bean-компонент в область запроса, что означает, что он будет обработан после завершения ответа, связанного с запросом (т. Е. Когда браузер завершит загрузку страницы). Поэтому, когда вы отправляете форму, будет запущен новый запрос и создан новый компонент, который, по-видимому, в вашем случае не подготавливает / не заполняет список пригородов в конструкторе (post), чтобы найти выбранный элемент ( и исполнить слушателя).
Чтобы исправить это, обычно нужно поместить компонент в область видимости с помощью аннотации JSF @ViewScoped
вместе с @ManagedBean
.
@ManagedBean
@ViewScoped
public class Bean {
// ...
}
Таким образом, экземпляр компонента будет жить, пока вы взаимодействуете с одним и тем же представлением. Но так как вы используете CDI для управления bean-компонентами вместо JSF, вам нужно будет использовать @ConversationScoped
вместо этого и контролировать Conversation
самостоятельно.
@Named
@ConversationScoped
public class Bean {
@Inject
private Conversation conversation;
@PostConstruct
public void init() {
conversation.begin();
// ...
}
public void submit() {
// ...
conversation.end();
}
}