Рендеринг JSF не работает - PullRequest
1 голос
/ 06 мая 2011

У меня есть что-то подобное на моей веб-странице, меню выбора / выпадающего меню.Это раскрывающееся меню должно создать другое раскрывающееся меню на основе выбранного элемента.Я делаю это по телефону <f:ajax event="change"..listener=..>

Но это не так, как я ожидал.При выборе пункта в раскрывающемся меню вызвать слушателя в теге ajax, изменения * не влияют на свойство rendered следующих раскрывающихся таблиц.И значение для rendered успешно изменилось с ложного на истинное.Это заставило меня задуматься, что не так на моей странице jsf.

Вот xhtml '

                        <h:selectOneMenu value="#{teacher.viewCategory}">
                            <f:selectItem itemValue="0" itemLabel="Tahun" />
                            <f:selectItem itemValue="1" itemLabel="Mata Pelajaran" />
                            <f:ajax event="change" render="divYearSelection divCourseSelection"
                                    listener="#{teacher.enableViewCategory}"/>
                        </h:selectOneMenu>

                        <h:panelGroup id="divYearSelection" layout="block" rendered="#{teacher.showViewYearSelection}">
                            <h:outputText value="YEAR"/>
                        </h:panelGroup>

                        <h:panelGroup id="divCourseSelection" layout="block" rendered="#{teacher.showViewCourseSelection}">
                            <h:outputText value="COURSE"/>
                        </h:panelGroup>


                        <h:commandButton value="#{msg.tcr_form_submit_view}" action="#{teacher.viewTeacher}"/>
                    </h:panelGrid>
                </h:form>' 

, и это функция bean-компонента, поддерживающая ajax

public void enableViewCategory(AjaxBehaviorEvent e) {       
        if (this.getViewCategory().equals("0")) {
            this.setShowViewYearSelection(true);
        } else {
            this.setShowViewCourseSelection(true);
        }
    } 

При отладке функция работает нормально.

1 Ответ

4 голосов
/ 06 мая 2011

Если частичный рендеринг не работает, хорошей отправной точкой является поиск в html-источнике вашей страницы, как он отображается в браузере. Ваш render="divYearSelection" будет работать, только если оба (компонент запуска ajax и целевой компонент) имеют один и тот же прямой родительский контейнер.

Идентификаторы визуализированных html-компонентов обычно выглядят как id="formId:componentId:nestedComponentId1" или id="formId:componentId:nestedComponentId2"

Таким образом, render="nestedComponentId2", вызываемый из component1, будет работать, только если оба идентификатора имеют один и тот же «трейлер».

Вы можете попытаться использовать полный идентификатор, указанный в примере, начиная с идентификатора формы или, альтернативно (если вся форма не слишком большая), использовать render="@form", который обновляет всю форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...