在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}" />