动态 primefaces menuItem 不触发命令
Dynamic primefaces menuItem don't fire command
环境:
- Java 7
- Jboss 5.2
- Primefaces 6.2
我遇到的问题是,当我单击菜单项时,命令不会触发 themeSwitcherBean.changeToOld 方法。怎么了?
MenuModel menu = new DefaultMenuModel();
创建菜单
...
for (Iterator<Menu> it = children.iterator(); it.hasNext(); ) {
Menu subMenu = (Menu) it.next();
String index = subMenu.getCodi();
String element = rootCodi + index;
DefaultMenuItem menuItem = new DefaultMenuItem(menuName);
menuItem.setId(element);
menuItem.setUrl(subMenu.getServletPath());
menuItem.setCommand("#{themeSwitcherBean.changeToNew}");
menuItem.setUpdate(":content");
rootNode.addElement(menuItem);
}
menu.addElement(rootNode);
...
Menu.xhtml
<h:form id="frmMenu">
<pu:menu model="#{sessionBean.menu}">
</h:form>
如果将 URL 设置为 menuItem.url
属性,则为 rendered as a simple hyperlink using href。
单击此按钮会导致浏览器导航到给定的 URL 并使用 GET
请求它,而不是选择性地使用 AJAX 执行 POST
请求。
这最终不会以 AJAX 方式更新“:content”,也不会调用您的 themeSwitcherBean.changeToNew
操作方法。
为了调用您的操作方法,您必须跳过该行:
menuItem.setUrl(subMenu.getServletPath());
如果您发现需要重新加载整个页面(这很可能在切换主题时)而不是仅使用“:content”引用的元素,请将您的操作方法 return 该指令设为 String
:
public String changeToNew() {
// do something ...
// ...
String viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId();
return viewId + "?faces-redirect=true&includeViewParams=true";
}
在这种情况下,您可以在该菜单项上禁用 AJAX,从而稍微减少 request/response/javaScript 开销:
menuItem.setAjax(false);
环境:
- Java 7
- Jboss 5.2
- Primefaces 6.2
我遇到的问题是,当我单击菜单项时,命令不会触发 themeSwitcherBean.changeToOld 方法。怎么了?
MenuModel menu = new DefaultMenuModel();
创建菜单
...
for (Iterator<Menu> it = children.iterator(); it.hasNext(); ) {
Menu subMenu = (Menu) it.next();
String index = subMenu.getCodi();
String element = rootCodi + index;
DefaultMenuItem menuItem = new DefaultMenuItem(menuName);
menuItem.setId(element);
menuItem.setUrl(subMenu.getServletPath());
menuItem.setCommand("#{themeSwitcherBean.changeToNew}");
menuItem.setUpdate(":content");
rootNode.addElement(menuItem);
}
menu.addElement(rootNode);
...
Menu.xhtml
<h:form id="frmMenu">
<pu:menu model="#{sessionBean.menu}">
</h:form>
如果将 URL 设置为 menuItem.url
属性,则为 rendered as a simple hyperlink using href。
单击此按钮会导致浏览器导航到给定的 URL 并使用 GET
请求它,而不是选择性地使用 AJAX 执行 POST
请求。
这最终不会以 AJAX 方式更新“:content”,也不会调用您的 themeSwitcherBean.changeToNew
操作方法。
为了调用您的操作方法,您必须跳过该行:
menuItem.setUrl(subMenu.getServletPath());
如果您发现需要重新加载整个页面(这很可能在切换主题时)而不是仅使用“:content”引用的元素,请将您的操作方法 return 该指令设为 String
:
public String changeToNew() {
// do something ...
// ...
String viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId();
return viewId + "?faces-redirect=true&includeViewParams=true";
}
在这种情况下,您可以在该菜单项上禁用 AJAX,从而稍微减少 request/response/javaScript 开销:
menuItem.setAjax(false);