我正在通过将值绑定到备用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 afaik中的方法。我注意到command
中的DefaultMenuItem
属性没有在Primefaces源代码中使用,并且没有在Primefaces 6.2用户指南中记录。
我在https://gitlab.com/krichter/primefaces-menuitem-bean-callback提供了一个SSCCE。除了上面的MCVE之外,它不包含更多信息,而仅仅是为了简化问题调查而存在。
我正在使用Primefaces 6.2。
答案 0 :(得分: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”参数和Action命令组合在同一菜单项中,因为它首先使用URL。如果您需要发送到新位置,只需将Command作为字符串返回即可,例如,您将导航至该页面:
public String onMenuItemClick(String message) {
System.out.println(BackingBeanView0.class.getName()+" message: "+message);
return "/index.xhtml";
}