【问题标题】:How to use square bracket in EL JSF如何在 EL JSF 中使用方括号
【发布时间】:2023-03-22 19:50:01
【问题描述】:

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

1.所以说我有这个

#{bean.x}

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

2.第二种情况来自BalusC代码Pass Argument to a composite-component action attribute

<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>

我了解代码在做什么,并且运行良好,但如果有人能解释在这种情况下方括号的用途,我将不胜感激。非常感谢

【问题讨论】:

  • 第二部分,cc.attrs是页面传递给组合的参数映射。如果bean 的值为myBeanaction 的值为myAction,则#{cc.attrs.bean[cc.attrs.action]} 将等价于#{myBean.myAction}(当然,但作为属性传递给组合。

标签: jsf jsf-2 el


【解决方案1】:

我想我使用#{bean.x[0]},但我遇到了异常。

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


第二种情况是从 BalusC 代码将参数传递给复合组件动作属性

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

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

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

大括号符号也用于Map&lt;K, V&gt;。它允许您指定包含点的键(不应该作为属性进行 EL 评估)

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

它当然也允许你指定一个动态映射键:

#{bean.map[otherBean.mapKey]}

另见:

【讨论】:

  • I think I use #{bean.x[0]}, but I got exception. 这实际上确实有效。我写了一个小测试用例,它按预期工作。例外是别的。感谢您的洞察力
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 2013-06-11
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2011-09-11
相关资源
最近更新 更多