Facelet标记文件/JSF中的条件绑定属性



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

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

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

在我看来,使用绑定是一种破解。我的建议是以不同的方式解决你的底层问题。也就是说,对于您的条件绑定问题,有一种变通方法,使用";大括号表示法";以及回退绑定对象。与其传递要绑定的对象,不如传递它的名称(String(,这样可以像一样绑定它

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

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

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

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

另请参阅:

  • ;绑定';JSF中的属性工作?何时以及如何使用
  • https://stackoverflow.com/tags/el/info

相关内容

最新更新