【问题标题】:JSF Adding Action ListenersJSF 添加动作监听器
【发布时间】:2011-01-17 10:40:54
【问题描述】:

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

我已经尝试添加 addActionListener 和 setActionListener,但是当点击链接时它们都不会被调用。

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

【问题讨论】:

    标签: java jsf listener icefaces menuitem


    【解决方案1】:

    它们需要按如下方式创建和添加(复制自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");
    

    【讨论】:

    • 那么您显然仍在使用旧的 JSF 1.0/1.1(在 4(!!) 年前已被 1.2 取代)。单击上述链接查看创建ActionListener 的JSF 1.1 方式。你还是需要自己设置一个固定的ID!
    • 原来在 Maven 中引用了另一个正在使用 MyFaces 的项目,即使我有 JSF 1.2 它也没有编译 :-)...再次感谢您的回复。
    • 每个组件一个唯一的 ID。如有必要,您可以为其添加一些计数器,例如child.setId("someFixedId" + parent.getChildCount()); parent.getChildren().add(child);
    • 哇...太糟糕了,我需要想出一个独特的命名策略来添加一个监听器!
    • 如果你用聪明的方式做这件事并不难,也可以看看评论中的代码示例。或者你也可以抓住UIViewRoot#createUniqueId():java.sun.com/javaee/6/docs/api/javax/faces/component/…
    【解决方案2】:

    BalusC 指出的主要问题是您需要设置 ID。 然后您可以按如下方式添加事件侦听器: 私人菜单项创建项目(字符串名称){ 菜单项项=新菜单项(); item.addActionListener(new ActionListener() {

            public void processAction(ActionEvent event)
                    throws AbortProcessingException {
                // handle event
    
            }
        });
        item.setValue(name);
        return item;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 2013-09-21
      • 2013-04-28
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      相关资源
      最近更新 更多