【问题标题】:Jsf dynamically created actionListener parameterjsf动态创建actionListener参数
【发布时间】:2011-07-01 22:15:26
【问题描述】:

我有一个自定义的 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,但它抱怨找不到方法,并且方法存在!

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

【问题讨论】:

    标签: jsf icefaces actionlistener


    【解决方案1】:

    因为paginationController 是变量,您需要在此处使用 [] 语法。假设paginationLinkClicked是一个固定的方法名:

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

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

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

    【讨论】:

    • 您好 Arjan,非常感谢您的回答,不幸的是它不起作用,它显示相同的消息:javax.el.MethodNotFoundException: /WEB-INF/jsf/common/components/facelets /applicationList.xhtml @109,74 actionListener="#{paginationController['paginationLinkClicked']}":找不到方法:rowSelectController.paginationLinkClicked(javax.faces.event.ActionEvent)。方法签名也是正确的,不用怀疑:public void paginationLinkClicked(ActionEvent event) {}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2012-10-03
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多