在JSF页面中定义和重用ELvariables
是否可以在ELexpression式中定义variables并重新使用variables?
例如 :
<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}" /> 
有任何想法吗 ? 谢谢 !
 你可以使用<c:set>来实现这个function: 
 <c:set var="myVar" value="#{myBean.data.something.very.long}" scope="request" /> 
 这个ELexpression式将被评估一次并存储在请求范围中。 请注意,只有在视图构build时间内该值可用时,此function才有效。 如果情况并非如此,那么你需要删除scope属性,以便它成为一个真正的“别名”: 
 <c:set var="myVar" value="#{myBean.data.something.very.long}" /> 
请注意,这不会caching请求范围中的评估值! 每次都会重新评估。
 像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}" />