是否可以在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或@Namedbean)中.
控制器:
@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 次 |
| 最近记录: |