0

私は今、あなたの助けが本当に必要です。この問題を解決するためにほぼ 1 週間を費やしましたが、成功しませんでした。

私は PrimeFaces を使用しており、動的 UIComponents を使用して動的フォームを作成する必要がある状況があります。これは私にとってはうまくいきます。

次に、これらの動的に作成された UIComponents に対して、動的なコンテキスト メニューを表示する必要があります。これもうまくいきますが、MenuItems をクリックすると、actionListener がトリガーされません。

私のコードは次のようになります。

private void addContextMenu(Panel panel, ......){
    ...................
    Submenu submenu;
    MenuItem menuItem;

    Application application = FacesContext.getCurrentInstance().getApplication();
    ExpressionFactory expressionFactory = application.getExpressionFactory();
    ContextMenu contextMenu = (ContextMenu) application.createComponent(ContextMenu.COMPONENT_TYPE);
    contextMenu.setStyleClass("applyBG");
    contextMenu.setFor(panel.getId());        
    contextMenu.setId("CM_"+panel.getId().substring(3));

..................
..................

    //Add SubMenus for Parent TableContainerElements
    do{
        submenu = (Submenu) application.createComponent(Submenu.COMPONENT_TYPE);
        submenu.setLabel(..........);
        submenu.setId(........);

        menuItem = (MenuItem) application.createComponent(MenuItem.COMPONENT_TYPE);
        menuItem.setId(.......);
        menuItem.setValue(......);
        menuItem.addActionListener(
                new MethodExpressionActionListener(expressionFactory.createMethodExpression(
                FacesContext.getCurrentInstance().getELContext(), 
                "#{testManagedBean.checkTestCommand}", null, new Class[] { ActionEvent.class })));
        submenu.getChildren().add(menuItem);

        <.......Add one more MenuItem to subMenu......>


        contextMenu.getChildren().add(submenu);
    }while(...........);

    panel.getChildren().add(contextMenu);
}

私の ActionListener は次のようになります。

public void checkTestCommand(ActionEvent ae){
    System.err.println("Test Command Received");
    MenuItem menuItem = (MenuItem)ae.getSource();
    System.err.println(menuItem.getId());
    ContextMenu contextMenu = (ContextMenu)menuItem.getParent();
    System.err.println(contextMenu.getId());
}

ここで何が問題なのか教えてください。本当に感謝しています。

ありがとう、よろしく、アナンド。

4

1 に答える 1