如果JSF不支持<f:actionListener>,为什么可以将它绑定到任意方法?

戴维斯

我正在使用Glassfish 3.1.2.2和JSF Mojarra 2.1.6。

我有以下Facelets页面:

<h:form>
  <h:commandLink value="link">
    <f:actionListener binding="#{backingBean.someMethod(1)}"/>
  </h:commandLink>
</h:form>

以及以下支持bean:

@RequestScoped
@ManagedBean
public class BackingBean {
  public void someMethod(int i) {
    System.out.println("It was called: " + i);
  }
}

当我单击链接时,控制台中将出现“信息:被称为:1”。

binding阅读文档

库:http : //xmlns.jcp.org/jsf/core,http : //java.sun.com/jsf/core(Jsf核心)

标签:actionListener

捆绑

值绑定表达式,其值计算为实现javax.faces.event.ActionListener对象[强调我的]

另外,对此问题的公认答案指出,f:actionListener调用任意方法是不可能的

如果不支持,为什么调用后备bean方法?

BalusC

这是EL 2.2的新功能的结果,该功能通过#{bean.method()}语法在值表达式中调用方法,而不是仅通过#{bean.property}语法(实际上应该是确切的类型ActionListener引用属性在EL 2.1或更早版本中将无法使用,并且在删除参数和括号时也将无法使用。该文档是在EL 2.2不存在时编写的(与2006年5月的JSF 1.2版本相比,实际上并没有进行修改; 2009年12月推出了EL 2.2)。但是,我确实同意它需要对该部分进行更新,因为这会使初学者感到困惑。

您找到的答案是基于文档提出的,但是答案似乎并没有基于这样的问题:虽然binding="#{testController.nodeListener}"失败了,但binding="#{testController.nodeListener(event)}" 实际上是有效的。这只会使您没有机会通过ActionEvent如果它建议仅使用它binding="#{testController.nodeListener()}"并以其他方式获取事件信息,例如通过调用UIComponent#getCurrentComponent()甚至传递#{component}为参数则答案会更好当然,只有在您确实需要帮助的情况下。

<h:commandLink value="link">
    <f:actionListener binding="#{bean.someMethod(component)}"/>
</h:commandLink>
public void someMethod(UIComponent component) {
    System.out.println("It was called on: " + component); // HtmlCommandLink
}

也可以看看:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在JSF中,不支持带有style.css的文件名,为什么?

为什么C ++ 20不支持“ void f(Concept const auto&)”?

为什么某些站点中的 Python 3 IDE 不支持 f 字符串函数?

不支持 put 方法

如果Android是Linux发行版,那么Ubuntu为什么不支持.apk文件?

F#中使用的运算符(-)引发C#不支持指定的方法

为什么不支持dnd模块?

为什么我不支持URI

Swift为什么不支持例外?

为什么IList不支持AddRange

为什么configfs不支持mmap?

为什么结构化绑定不支持变量?

如果JavaScript不支持古典继承,为什么我可以创建构造函数并使用new关键字?

F#不支持'\ 0'吗?

如果不支持用户的浏览器,是否可以显示警告消息?

如果不支持添加或删除元素,将Array转换为ArrayList有什么用?

如何找到所有SSE指令的列表?如果CPU不支持SSE,会发生什么?

为什么收到“对象不支持此属性方法”?

为什么我不支持请求方法GET?

为什么不支持SpringMVC请求方法'GET'?

为什么红宝石不支持方法重载?

列出了不支持类型的扩展方法。为什么?

为什么不支持select_for_update的数据库不支持它呢?

补丁方法不支持 post 方法

如果服务器不支持SSLv3,为什么Java SSL套接字连接会严重失败

gsl :: cstring_span不支持constexpr吗?如果没有,我为什么要使用它?

反应不支持地图方法

远程对象不支持的方法

对象不支持属性或方法“填充”