Подтвердить что ты не робот

Можно ли использовать условный оператор EL в атрибуте действия?

Условный оператор работает во многих атрибутах, таких как "вынесенный" "значение" и другие.

Но это не работает в действии? Или я делаю это неправильно?

<h:commandLink action="#{true ? bean.methodTrue() : bean.methodFalse()}"/>

Ошибка: javax.el.ELException: не действительное выражение метода

(я понял это, используя атрибут ajax для атрибутов primefaces)

4b9b3361

Ответ 1

Это не поддерживается. Атрибут action должен быть MethodExpression, но условный оператор делает его синтаксисом ValueExpression. Я не думаю, что это будет когда-либо поддерживаться для MethodExpression в EL.

У вас есть в основном 2 варианта:

  • Создайте один метод действий, который делегирует задание.

    <h:commandButton ... action="#{bean.method}" />
    

    с

    public String method() {
        return condition ? methodTrue() : methodFalse();
    }
    

    При необходимости передайте его как аргумент метода #{bean.method(condition)}.

  • Или условно отрисуйте 2 кнопки.

    <h:commandButton ... action="#{bean.methodTrue}" rendered="#{bean.condition}" />
    <h:commandButton ... action="#{bean.methodFalse}" rendered="#{not bean.conditon}" />