Если вы действительно не понимаете жизненный цикл представления JSF, не используйте c: foreach и c: if или какие-либо альтернативы.JSF - это компонентный фреймворк, поэтому фейскеты не являются языком шаблонов.Если вы попытаетесь использовать его как один, вы разочарованы (возможно, обвиняете невинную среду).
Представление JSF создается (немного упрощается) один раз за взаимодействие с пользователем, независимо от количества запросов.,После того, как он создан, вы не можете добавлять или удалять компоненты (опять же, упрощение), вы можете только изменять их состояние (например, рендеринг / не рендеринг).Поскольку весь смысл JSF состоит в том, чтобы инкапсулировать представление как статическую сущность, а не как программу, которая время от времени генерирует HTML, даже если вы могли бы использовать какой-то , если или выберите , вы не знали бы и не могли бы контролировать, когда он выполняется (после чтения параметров запроса? До чтения параметров запроса? До или после проверки? До или после преобразования?).
Я бынапишите свой код как:
@ManagedBean(name = "index")
@RequestScoped
public class IndexBean {
public enum Animal {
Cat, Dog;
}
private Animal animal;
public Animal getAnimal() {
return animal;
}
public void setAnimal(Animal animal) {
this.animal = animal;
}
public Animal[] getAnimals(){
return Animal.values();
}
}
А затем:
<h:form id="animalForm">
<h:selectOneRadio id="animal" onchange="submit()" value="#{index.animal}">
<f:selectItems value="#{index.animals}"/>
</h:selectOneRadio>
</h:form>
The animal is: #{index.animal}