我有一个自定义的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,但它抱怨它无法找到方法,并且方法就在那里!
还有一件事,如果我用正确的控制器名称替换参数,它就可以了!有什么想法吗?
答案 0 :(得分:0)
因为paginationController
是可变的,所以你需要在这里使用[]语法。假设paginationLinkClicked
是固定的方法名称:
<h:commandLink actionListener="#{paginationController['paginationLinkClicked']}" />
如果paginationLinkClicked
也是变量,则需要省略单引号:
<h:commandLink actionListener="#{paginationController[paginationLinkClicked]}" />