【问题标题】:Conditional binding attribute in Facelet tag file/JSFFacelet 标记文件/JSF 中的条件绑定属性
【发布时间】:2021-06-15 17:23:18
【问题描述】:

在我的 JSF 2.1 项目中,我定义了一个自定义标记文件,其中包含一个 h:inputText 元素。此元素可能包含也可能不包含 binding 属性 - 取决于自定义元素的传递参数。

formInput.xhtml 示例(摘录):

<h:inputText id="#{id}" value="#{value}">
    <c:if test="#{not empty binding}">
        <f:attribute name="binding" value="#{binding}"/>
    </c:if>
</h:inputText>

其他文件的用法:

<e:formInput id="test" value="#{testBean.myValue}" binding="#{testBean.myBinding}"/>

不幸的是,这不起作用。 #{not empty binding} 解析为 false 并且未应用绑定。

但是,在没有条件的情况下定义binding 属性确实有效。 示例:

<h:inputText id="#{id}" value="#{value}">
    <f:attribute name="binding" value="#{binding}"/>
</h:inputText>

在这种情况下,绑定应用正确。

有人知道如何有条件地设置绑定吗?

提前致谢!

【问题讨论】:

  • 这个运气好吗?

标签: jsf binding tagfile


【解决方案1】:

在我看来,使用绑定是一种 hack。我的建议是以不同的方式解决您的潜在问题。话虽如此,您的条件绑定问题有一个解决方法,使用“大括号表示法”和后备绑定对象。而不是传递要绑定的对象,而是传递它的名称(String),这样您就可以像这样绑定它:

<h:inputText binding="#{testBean[objectName]}"/>

大括号表示法还可以有条件地传递属性:

<h:inputText binding="#{testBean[empty objectName ? 'fallback' : objectName]}"/>

这要求您在#{testBean.fallback} 有一个可用的后备绑定对象。

另见:

【讨论】:

    猜你喜欢
    • 2013-02-07
    • 2011-11-13
    • 2020-08-09
    • 2011-12-31
    • 2012-01-16
    • 2016-11-26
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多