Jsf动态创建了actionListener参数

时间:2011-02-22 11:06:21

标签: jsf icefaces actionlistener

我有一个自定义的facelet组件(自定义标签),但有一件事目前让我很烦恼。我正在尝试将动作侦听器作为参数传递给自定义标记,以使其更具动态性并且无法正常工作。

环境:JSF 1.2,IceFaces 1.8

以下是我试图实现这一目标的方式:

  • 命令链接使用传递的参数'paginationController'

    <h:commandLink id="#{id}-link-three" value="click"
        actionListener="#{paginationController.paginationLinkClicked}" />
    
  • 参数'paginationController'的传递方式如下:

    paginationController="rowSelectController"
    
  • 当我点击链接时,我收到的是:

    Received 'javax.el.MethodNotFoundException' when invoking action listener
    '#{paginationController.paginationLinkClicked}' for component 'entity-list-apps-link-three'
    2011-02-22 12:49:47,803 SEVERE [javax.faces.event] (http-127.0.0.1-8080-4)
    javax.el.MethodNotFoundException: /WEB-INF/jsf/common/components/facelets
    /applicationList.xhtml @107,71 actionListener="#{paginationController.paginationLinkClicked}":
    Method not found: rowSelectController.paginationLinkClicked(javax.faces.event.ActionEvent)
    

所以它似乎成功地将bean名称解析为rowSelectController,但它抱怨它无法找到方法,并且方法就在那里!

还有一件事,如果我用正确的控制器名称替换参数,它就可以了!有什么想法吗?

1 个答案:

答案 0 :(得分:0)

因为paginationController是可变的,所以你需要在这里使用[]语法。假设paginationLinkClicked是固定的方法名称:

<h:commandLink actionListener="#{paginationController['paginationLinkClicked']}" />

如果paginationLinkClicked也是变量,则需要省略单引号:

<h:commandLink actionListener="#{paginationController[paginationLinkClicked]}" />