0

在我的 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>

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

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

提前致谢!

4

1 回答 1

1

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

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

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

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

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

也可以看看:

于 2021-04-23T19:09:26.490 回答