如何在单击菜单项时指定支持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不会更改此行为。
onXXX
上javascript回调的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回调?的主要内容,如果未能解决你的问题,请参考以下文章