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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在单击菜单项时指定支持bean回调?相关的知识,希望对你有一定的参考价值。

我通过将值绑定到支持bean中的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不会更改此行为。

onXXXjavascript回调的DefaultMenuItem属性不能用于触发支持bean中的方法。我注意到command中的DefaultMenuItem属性未在Primefaces源代码中使用,并且未在Primefaces 6.2用户指南中记录。

我在https://gitlab.com/krichter/primefaces-menuitem-bean-callback提供SSCCE。它不包含比上述MCVE更多的信息,仅用于简化问题的调查。

我正在使用Primefaces 6.2。

答案

我想我知道你在问什么。在下面的示例中,我调用bean控制器方法myController.changeAccount,我还提供了一个OnComplete Javascript回调,就像我在XHTML中构建菜单一样。

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!");

您不能在首先使用URL的同一菜单项中组合“URL”参数和Action命令。如果您需要发送到新位置,您的Command只需将其作为字符串返回,您将导航到该页面,例如:

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

以上是关于如何在单击菜单项时指定支持bean回调?的主要内容,如果未能解决你的问题,请参考以下文章

如何将片段目标绑定到底部导航栏中的菜单项?

选择导航菜单项时不会替换上一个片段

在java中单击菜单项时如何更改形状

右键单击任何菜单项时如何获取 MenuItem 名称?

在 UWP 中单击汉堡菜单项时如何提高应用程序性能?

单击另一个菜单项时如何切换菜单