Определение и повторное использование переменной 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}"
/>

Есть идеи? Спасибо!

2 ответа

Решение

Ты можешь использовать <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}" />

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

НЕ использовать <ui:param>, Когда не используется для передачи параметра в template как определено в <ui:composition> или же <ui:decorate> и, следовательно, по существу злоупотребляя им, поведение не определено, и фактически это будет ошибкой в ​​используемой реализации JSF, если это возможно. На это никогда не следует полагаться. Смотрите также JSTL в JSF2 Facelets... имеет смысл?

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

контроллер:

@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}"
/>
Другие вопросы по тегам