Определение и повторное использование переменной EL на странице JSF

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

Например:

<h:inputText 
   value="#{myBean.data.something.very.long}"
   rendered="#{myBean.data.something.very.long.showing}"
/>

Что я имею в виду, это что-то вроде:

<!-- 
     somehow define a variable here like : 
     myVar = #{myBean.data.something.very.long} 
-->
<h:inputText 
   value="#{myVar}"
   rendered="#{myVar.showing}"
/>

Любые идеи? Спасибо!

Ответ 1

Вы можете использовать <c:set> для этого:

<c:set var="myVar" value="#{myBean.data.something.very.long}" scope="request" />

Это выражение EL затем будет оцениваться один раз и храниться в области запроса. Обратите внимание, что это работает только тогда, когда значение доступно во время просмотра времени сборки. Если это не так, вам нужно удалить атрибут scope, чтобы он стал истинным "псевдонимом":

<c:set var="myVar" value="#{myBean.data.something.very.long}" />

Обратите внимание, что этот не кэширует оцениваемое значение в области запроса! Он будет пересматриваться каждый раз.

Ответ 2

Как и любой вид в MVC, страница должна быть максимально .. Если вам нужен ярлык, поместите ярлык в контроллер (@ManagedBean или @Named bean).

Контроллер:

@Named
public MyBean
{
    public Data getData()
    {
        return data;
    }

    public Foo getFooShortcut()
    {
        return data.getSomething().getVery().getLong();
    ]
}

Вид:

<h:inputText 
   value="#{myBean.fooShortcut}"
   rendered="#{myBean.fooShortcut.showing}"
/>