Я игнорирую синтаксическую ошибку в вашем EL (отсутствует }
).
Команда не будет выполнена, когда #{param.t eq 'normal'}
оценивается как false
в момент обработки запроса на отправку формы.Вам необходимо сохранить тот же параметр для последующего запроса, чтобы кнопка отображалась так, чтобы JSF мог подтвердить, что конечному пользователю разрешено вызывать действие.Вы можете сделать это, добавив <f:param>
:
<h:form>
<h:commandButton value="ADD" action="#{addBean.doSomething}">
<f:param name="t" value="#{param.t}" />
</h:commandButton>
</h:form>
Обратите внимание, что это поддерживается только в JSF 2.0.В JSF 1.x вам нужно заменить h:commandButton
на h:commandLink
, если вам нужна поддержка f:param
.
Не связана с конкретной проблемой, вам следуетстарайтесь избегать JSTL, насколько это возможно, в ваших представлениях JSF.Если цель состоит в том, чтобы визуализировать части представления условно (а не строить части представления условно), то вместо JSTL <c:choose>
или <c:if>
:
<h:panelGroup rendered="#{empty param.t}">
// HTML
</h:panelGroup>
<h:panelGroup rendered="#{param.t eq 'normal'}">
// HTML
<h:form>
<h:commandButton value="ADD" action="#{addBean.doSomething}" />
</h:form>
</h:panelGroup>
следует использовать атрибут
rendered
компонента JSF