Почему h: commandButton не выполняет метод действия в сочетании с c: selected? - PullRequest
1 голос
/ 29 августа 2011

Я видел странную проблему в моем проекте. Дело в том, что <h:commandButton/> не выполняет метод действия.

<c:choose>
   <c:when test="#{empty param.t}">
       // HTML
   </c:when>
   <c:when test="#{param.t eq 'normal'}">
       // HTML
       <h:form>
           <h:commandButton value="ADD" action="#{addBean.doSomething}" />
       </h:form>
   <c:when>
</c:choose>

Когда я перемещаю <h:form> в первый c:when, вызывается метод действия. В противном случае это не так. Почему?

1 Ответ

5 голосов
/ 29 августа 2011

Я игнорирую синтаксическую ошибку в вашем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...