Вложенные переменные в EL - PullRequest
       22

Вложенные переменные в EL

1 голос
/ 25 августа 2011

Можно ли вкладывать вызовы переменных, как показано ниже, в EL, используя FacesContext или другие неявные объекты, такие как request, session и т. Д.?Это, конечно, не работает.Я получаю эту ошибку

Синтаксический анализ ошибки: # {myBean.myMethod (# {FacesContext.getCurrentInstance (). GetViewRoot (). GetViewId ()})}

дляэта попытка

<ui:include src="#{myBean.myMethod(#{FacesContext.getCurrentInstance().getViewRoot().getViewId() })}">

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Это действительно недопустимый синтаксис EL.Вложение #{} запрещено.Просто поместите все выражение внутри того же #{}.Кроме того, #{FacesContext} не существует в области видимости EL Facelets, это #{facesContext}, и это уже текущий экземпляр.Кроме того, вам не обязательно указывать полное имя метода в скобках, если это уже метод getter.

Итак, это должно сделать

<ui:include src="#{myBean.myMethod(facesContext.viewRoot.viewId)}">

(обратите внимание, что этопо-прежнему требуется целевой контейнер с поддержкой Servlet 3.0 / EL 2.2)

1 голос
/ 26 августа 2011

Чтобы добавить ответ BalusC, я хотел бы прокомментировать, что, как правило, сделайте ваши EL-выражения как можно более простыми и поместите всю логику - особенно сложную логику - в Java компонента поддержки. Почему бы просто не создать новый метод Java в MyBean, который делает то, что вы хотите, и просто сослаться на это?

EL очень мощный, но мне кажется, что его способность побуждает вас использовать бизнес-логику на уровне представления.

...