Теги 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}" />
Однако у вас есть еще одна потенциальная проблема в будущем при вызове действия. Убедитесь, что компонент помещен в область видимости, а не в область запроса.