Не удается отобразить SelectManyCheckbox из моего SelectOneMenu с помощью ValueChangeListener

У меня есть карта (целое число, список), которую я хочу заполнить со страницы JSF. Я использую только JSF, без Primefaces или чего-то подобного.

На моей странице JSF есть selectOneMenu, в котором отображаются все ключи моей карты, и selectManyBox для выбора значений для каждого ключа.

Я хочу иметь возможность сохранять каждое состояние перед отправкой всей карты.

Смотрите мой боб:

@ManagedBean(name="myBean")
@SessionScoped
public class MyBean implements Serializable {
    (...)
    public void refresh(ValueChangeEvent e)
{
    if (idRole==-1){ //to check if its just the first selection                     
        setKey((int)e.getNewValue());
    }
    else{
        myObject.getMap().put(key,listOfValuesSelected); //put current manycheckbox values in last selected key
        setKey((int)e.getNewValue()); //get new key
        listOfValuesSelected=MyObject.getMap().get(Key); //refresh the
                               //selectManyCheckbox for the newly selected key          
    }

}

Моя JSF-страница

<h:selectOneMenu id="idRole" value="#{myBean.key}" onchange="submit()" valueChangeListener="#{myBean.refresh}" render="checkbox"> >
    <f:selectItem itemLabel="" itemValue="" />
    <f:selectItems value="#{myBean.listKeys}" />
</h:selectOneMenu>

<fieldset id="checkbox">
    <h:selectManyCheckbox value="#{myBean.listOfValuesSelected}">
        <f:selectItems value="#{myBean.listeOfValues}" var="n"
            itemLabel="#{n.title}" itemValue="#{n.key}"/>
    </h:selectManyCheckbox>
</fieldset>

Мой реальный код немного беспорядок, я немного изменил его, чтобы он соответствовал потребностям моего вопроса, но я могу дать вам настоящий код, если это необходимо.

Моя проблема в том, что selectmanycheckbox вообще не «реагирует». Я вижу, что listOfValuesSelected изменяется, когда я нахожусь в режиме отладки.


person user3798342    schedule 02.07.2014    source источник


Ответы (1)


Используете ли вы где-нибудь AJAX? А какую форму вы используете?

Под «не реагирует» вы имеете в виду, что он не перерисовывается или что ничего не происходит, когда вы выбираете в нем один или несколько элементов?

Если вы используете AJAX, то с данным кодом флажок выбора многих действительно не будет повторно отображаться (обновляться). Причина в том, что SelectOneMenu не имеет атрибута «рендеринг», который вызывает повторную визуализацию чего-либо. У сторонних компонентов часто есть такая вещь, но стандартные компоненты делают это только через тег f: ajax. Кроме того, вы не можете использовать идентификатор, не являющийся компонентом, в качестве цели повторного рендеринга. Fieldset не является компонентом.

См. http://docs.oracle.com/javaee/6/tutorial/doc/gkabr.html о том, как использовать f:ajax

person Mike Braun    schedule 02.07.2014
comment
О, большое спасибо. Так как я как бы начинаю с JSF. Я за то, чтобы попытаться проще реагировать на мои потребности. Поэтому я просто добавлю кнопку, которая будет отправлять изменения, и прослушиватель ajax, чтобы обновить представление. Сейчас работаю над этим, буду держать вас в курсе. спасибо за помощь - person user3798342; 03.07.2014