Условно рендерингс помощью - PullRequest
0 голосов
/ 20 марта 2012

Я использую jstl для небольшого тестирования.И это не работает, как это должно работать

вот маленький код:

<c:set var="id" value="#{mBlog.blog.id}"/>
                    ${id}    //printing  4  
                    <c:if test="${id > 0}">
                        <h:commandButton value="Update" action="#{mBlog.update}"/>  //is not rendered
                    </c:if>

                    <c:if test="${id == 0}">
                        <h:commandButton value="Save" action="#{mBlog.save}"/>  //is not rendered
                    </c:if>

Я не знаю, что не так.на дисплее я вижу только 4, больше ничего.

1 Ответ

4 голосов
/ 20 марта 2012

Теги JSTL и компоненты пользовательского интерфейса JSF не работают синхронно, как вы ожидаете от кодирования. Короче говоря: JSTL в JSF2 Facelets ... имеет смысл? Прочтите это внимательно.

В вашем конкретном случае условие тега JSTL <c:if>, похоже, зависит от результата тега JSF <f:event>. В настоящий момент <c:if> работает, во время сборки представления <f:event> еще не запускается, потому что выполняется во время события предварительного просмотра. Следовательно, #{mBlog.blog.id} всегда равно null или любому другому значению по умолчанию.

Вместо этого вам нужно использовать атрибут rendered компонента JSF. Он также сохраняет ваш код чище.

<h:commandButton value="Update" action="#{mBlog.update}" rendered="#{mBlog.blog.id gt 0}" />
<h:commandButton value="Save" action="#{mBlog.save}" rendered="#{mBlog.blog.id eq 0}" />

Однако у вас есть еще одна потенциальная проблема в будущем при вызове действия. Убедитесь, что компонент помещен в область видимости, а не в область запроса.

...