代码之家  ›  专栏  ›  技术社区  ›  Kalle Richter

如何在单击菜单项时指定支持bean回调?

  •  2
  • Kalle Richter  · 技术社区  · 6 年前

    我正在构建 p:slideMenu 通过将值绑定到 MenuModel 在后援的豆子里。这是必要的,因为内容是根据数据库查询的结果动态生成的。使用

    @Named
    @ViewScoped
    public class BackingBeanView0 implements Serializable {
        private static final long serialVersionUID = 1L;
        private MenuModel menuModel = new DynamicMenuModel();
    
        @PostConstruct
        private void init() {
            DefaultMenuItem menuItem = new DefaultMenuItem("Click me!",
                    null, //icon
                    "/index.xhtml" //url
            );
            menuItem.setCommand("#{backingBeanView0.onMenuItemClick('Hello world!')}");
            menuItem.setImmediate(true);
            menuModel.addElement(menuItem);
        }
    
        [getter and setter for menuModel]
    
        public void onMenuItemClick(String message) {
            System.out.println(BackingBeanView0.class.getName()+" message: "+message);
        }
    }
    

    正如@melloware所建议的(这并不表示需要在支持bean中创建模型)原因 backingBeanView0.onMenuItemClick 成为 调用

    延迟显示几秒钟。将所需的backing bean方法移动到视图范围的bean不会改变这种行为。

    这个 onXXX javascript回调的属性 DefaultMenuItem 无法用于在后援bean afaik中触发方法。我注意到 command 属性 默认项目 primefaces源代码中没有使用,而且primefaces 6.2用户指南中没有记录。

    我正在提供一个SSCCE https://gitlab.com/krichter/primefaces-menuitem-bean-callback . 它不包含比上述MCVE更多的信息,只是为了简化对问题的调查而存在。

    我用的是素面6.2。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Melloware    6 年前

    final DefaultMenuItem item = new DefaultMenuItem(bean.getLongName());
    item.setCommand("#{myController.changeAccount('" + bean.getShortName() + "')}");
    item.setImmediate(true);
    item.setOncomplete("melloware.handleAccountChange(xhr, status, args);");
    

    DefaultMenuItem menuItem = new DefaultMenuItem("Click me!",
                    null, //icon
                    "/index.xhtml" //url
            );
    

    DefaultMenuItem menuItem = new DefaultMenuItem("Click me!");
    

    public String onMenuItemClick(String message) {
          System.out.println(BackingBeanView0.class.getName()+" message: "+message);
          return "/index.xhtml";
    }