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