如何在单击菜单项时指定支持 bean 回调?
How to specify a backing bean callback on click on a menu item?
我通过将值绑定到支持 bean 中的 MenuModel
来构建 p:slideMenu
的内容。这是必要的,因为内容是根据数据库查询的结果动态生成的。使用
@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
被 不 调用
延迟几秒显示。将所需的支持 bean 方法移动到视图范围的 bean 不会改变此行为。
DefaultMenuItem
上 Javascript 回调的 onXXX
属性不能用于触发支持 bean afaik 中的方法。我注意到 DefaultMenuItem
中的 command
属性 未在 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" 参数和操作命令。如果您需要发送到新位置,只需将您的命令 return 作为字符串,您将导航到该页面,例如:
public String onMenuItemClick(String message) {
System.out.println(BackingBeanView0.class.getName()+" message: "+message);
return "/index.xhtml";
}
我通过将值绑定到支持 bean 中的 MenuModel
来构建 p:slideMenu
的内容。这是必要的,因为内容是根据数据库查询的结果动态生成的。使用
@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
被 不 调用
延迟几秒显示。将所需的支持 bean 方法移动到视图范围的 bean 不会改变此行为。
DefaultMenuItem
上 Javascript 回调的 onXXX
属性不能用于触发支持 bean afaik 中的方法。我注意到 DefaultMenuItem
中的 command
属性 未在 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" 参数和操作命令。如果您需要发送到新位置,只需将您的命令 return 作为字符串,您将导航到该页面,例如:
public String onMenuItemClick(String message) {
System.out.println(BackingBeanView0.class.getName()+" message: "+message);
return "/index.xhtml";
}