为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2019-10-29 14:04:12
以后可以在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}"/>有任何想法吗 ?谢谢 !
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您可以<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>


查看完整回答
反对 回复 2019-10-29
?
潇湘沐

TA贡献1816条经验 获得超6个赞

像MVC中的任何视图一样,页面应尽可能简单。如果需要快捷方式,请将快捷方式放入控制器(the @ManagedBean或@Namedbean)中。


控制器:


@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}"

/>


查看完整回答
反对 回复 2019-10-29
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

我以为ui:param仅提供要在模板中使用的变量,该模板利用了ui:composition。即使我不使用ui:composition,这是否也意味着我制作的每个jsf页面都是一个facelet

查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 521 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信