在JSF页面中定义和重用EL变量

以后可以在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}"

/>

有任何想法吗 ?谢谢 !


慕斯王
浏览 522回答 3
3回答

慕哥6287543

您可以<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定义的参数,从而实质上滥用了该参数,则该行为是未指定的,实际上,如果可能的话,这将是正在使用的JSF实现中的错误。永远不要依靠这一点。另请参见JSF2 Facelets中的JSTL ...有意义吗?<ui:composition><ui:decorate>

潇湘沐

像MVC中的任何视图一样,页面应尽可能简单。如果需要快捷方式,请将快捷方式放入控制器(the @ManagedBean或@Namedbean)中。控制器:@Namedpublic MyBean{&nbsp; &nbsp; public Data getData()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return data;&nbsp; &nbsp; }&nbsp; &nbsp; public Foo getFooShortcut()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return data.getSomething().getVery().getLong();&nbsp; &nbsp; ]}视图:<h:inputText&nbsp;&nbsp; &nbsp;value="#{myBean.fooShortcut}"&nbsp; &nbsp;rendered="#{myBean.fooShortcut.showing}"/>

叮当猫咪

我以为ui:param仅提供要在模板中使用的变量,该模板利用了ui:composition。即使我不使用ui:composition,这是否也意味着我制作的每个jsf页面都是一个facelet
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java