4

我见过有人在 JSF 中使用方括号,但我不确定我是否正确理解了它的用法。所以也许JSF大师可以帮助我理解它

1.所以假设我有这个

#{bean.x}

而 x 是一个二维数组 (x[][]),如何x[0]使用 EL 显示?我想在这种情况下我需要使用方括号。我想我使用#{bean.x[0]},但我有例外。

2.第二种场景是从BalusC代码Pass Argument到一个复合组件动作属性

<composite:interface>
   <composite:attribute name="bean" type="java.lang.Object" />
   <composite:attribute name="action" type="java.lang.String" />
   <composite:attribute name="property" type="java.lang.String" />
</composite:interface>
<composite:implementation>
   <h:commandButton value="Remove" action="#{cc.attrs.bean[cc.attrs.action]}">
      <f:setPropertyActionListener target="#{cc.attrs.bean[cc.attrs.property]}" value="Somestring" />
   </h:commandButton>
</composite:implementation>

我理解代码在做什么并且它工作得很好,但如果有人能解释在这种情况下方括号的用途是什么,我将不胜感激。非常感谢你

4

1 回答 1

10

我想我使用#{bean.x[0]},但我有例外。

很遗憾,您没有分享异常详细信息。但这应该可以正常工作,前提是有一个getX()方法可以返回null给定索引确实存在的非数组。


第二个场景是从 BalusC 代码 Pass Argument 到一个复合组件动作属性

在这种特殊情况下,大括号表示法[]使您能够使用动态属性名称或操作方法名称。以下当然不起作用

#{cc.attrs.bean.cc.attrs.action}

它只会尝试调用bean.getCc().getAttrs().action().

大括号符号也用于Map<K, V>. 它允许您指定包含点的键(这又不应该被 EL 评估为属性)

#{bean.map['key.with.dots']}

当然,它还允许您指定动态映射键:

#{bean.map[otherBean.mapKey]}

也可以看看:

于 2012-09-09T23:57:29.547 回答