是否可以在EL表达式中定义变量并重新使用该变量?
例如 :
<h:inputText
value="#{myBean.data.something.very.long}"
rendered="#{myBean.data.something.very.long.showing}"
/>
Run Code Online (Sandbox Code Playgroud)
我的想法是这样的:
<!--
somehow define a variable here like :
myVar = #{myBean.data.something.very.long}
-->
<h:inputText
value="#{myVar}"
rendered="#{myVar.showing}"
/>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?谢谢 !
Bal*_*usC 105
你可以使用<c:set>
这个:
<c:set var="myVar" value="#{myBean.data.something.very.long}" scope="request" />
Run Code Online (Sandbox Code Playgroud)
然后,将对此EL表达式进行一次计算并将其存储在请求范围中.请注意,仅当值在视图构建期间可用时,此方法才有效.如果情况并非如此,那么您需要删除scope
属性以使其成为真正的"别名":
<c:set var="myVar" value="#{myBean.data.something.very.long}" />
Run Code Online (Sandbox Code Playgroud)
因此请注意,这不会将评估值缓存在请求范围内!它将每次重新评估.
千万不要使用<ui:param>
.如果不使用以便将参数传递给or中template
定义的参数,从而本质上滥用它,那么行为是未指定的,实际上如果可能的话,它将是JSF实现中的一个错误.永远不应该依赖这个.另请参阅JSF2 Facelets中的JSTL ......有意义吗?<ui:composition>
<ui:decorate>
Mat*_*all 20
与MVC中的任何视图一样,页面应尽可能简单.如果需要快捷方式,请将快捷方式放入控制器(@ManagedBean
或@Named
bean)中.
控制器:
@Named
public MyBean
{
public Data getData()
{
return data;
}
public Foo getFooShortcut()
{
return data.getSomething().getVery().getLong();
]
}
Run Code Online (Sandbox Code Playgroud)
视图:
<h:inputText
value="#{myBean.fooShortcut}"
rendered="#{myBean.fooShortcut.showing}"
/>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
82885 次 |
最近记录: |