JSF添加动作侦听器

时间:2010-02-16 15:09:06

标签: java jsf listener icefaces menuitem

我正在动态创建一个MenuItem,我想在单击MenuItem时添加自定义侦听器。

我尝试添加addActionListener和setActionListener,但是在单击链接时都不会调用它们。

似乎有一个名为“监听器”的List附加到MenuItem(我可以在静态调试监听器的MenuItem设置时看到这一点)。知道如何正确添加监听器吗?

2 个答案:

答案 0 :(得分:3)

需要按照以下方式创建和添加它们(从one of my previous answers复制):

FacesContext context = FacesContext.getCurrentInstance();
MethodExpression actionListener = context.getApplication().getExpressionFactory()
    .createMethodExpression(context.getELContext(), "#{bean.actionListener}", null, new Class[] {ActionEvent.class});
uiCommandComponent.addActionListener(new MethodExpressionActionListener(actionListener));

...其中#{bean.actionListener}实际存在,并在与托管bean名称bean关联的支持bean类中声明如下:

public void actionListener(ActionEvent event) {
    // ...
}

更重要的是,您需要为任何动态创建的 UICommand(和UIInput)组件提供固定ID,否则它将获得一个自动生成的ID可能导致JSF在应用请求值阶段无法找到/关联它。

因此,也这样做:

uiCommandComponent.setId("someFixedId");

答案 1 :(得分:0)

BalusC指出的主要问题是您需要设置ID。 然后,您可以添加事件侦听器,如下所示:     private MenuItem createItem(String name){         MenuItem item = new MenuItem();         item.addActionListener(new ActionListener(){

        public void processAction(ActionEvent event)
                throws AbortProcessingException {
            // handle event

        }
    });
    item.setValue(name);
    return item;
}