Как динамически добавлять компоненты JSF

Можно ли динамически добавлять компоненты JSF? Мне нужно иметь форму с кнопкой, которая должна добавить один к форме. Возможно ли это?

Я знаю, что это должно быть возможно в JavaScript как-то. Кто-нибудь знает, как это сделать в JSF? Я думаю, что основная проблема заключается в том, как получить или установить значения новых входов с помощью # {value} .

29
задан BalusC 27 April 2015 в 15:14
поделиться

1 ответ

Используйте повторяющийся компонент, например или , чтобы отобразить список List с динамическим размером сущностей. Сделайте bean-компонент @ViewScoped , чтобы гарантировать, что список запоминается при обратных передачах в одном и том же представлении, а не воссоздается снова и снова.

Начальный пример с (при использовании просто замените на и , например,

  • или
    ):

    <h:form>
        <h:dataTable value="#{bean.items}" var="item">
            <h:column><h:inputText value="#{item.value}" /></h:column>
            <h:column><h:commandButton value="remove" action="#{bean.remove(item)}" /></h:column>
        </h:dataTable>
        <h:commandButton value="add" action="#{bean.add}" />
        <h:commandButton value="save" action="#{bean.save}" />
    </h:form>
    

    Управляемый компонент:

    @ManagedBean
    @ViewScoped
    public class Bean {
    
        private List<Item> items;
    
        @PostConstruct
        public void init() {
            items = new ArrayList<Item>();
        }
    
        public void add() {
            items.add(new Item());
        }
    
        public void remove(Item item) {
            items.remove(item);
        }
    
        public void save() {
            System.out.println("items: " + items);
        }
    
        public List<Item> getItems() {
            return items;
        }
    
    }
    

    Модель:

    public class Item {
    
        private String value;
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    
        public String toString() {
            return String.format("Item[value=%s]", value);
        }
    
    }
    

    См. Также:

    34
    ответ дан 28 November 2019 в 01:57
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: