【发布时间】:2014-07-07 08:56:21
【问题描述】:
我是 Primefaces 的新手,我正在关注 User Guide of Version 5.0。 我已经成功构建了一个静态菜单。现在我正在尝试构建一个非常简单的动态菜单,基本上是复制粘贴用户指南上的示例(如果您有兴趣,请参见第 294 页)。但它不起作用。
这是我的 XHTML 页面:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>test-primefaces</title>
</h:head>
<h:body>
<h:form>
<p:menu model="#{menuBean.model}" />
</h:form>
</h:body>
这是我的 MenuBean.java
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;
@ManagedBean
@SessionScoped
public class MenuBean {
private MenuModel model;
public MenuBean() {
model = new DefaultMenuModel();
//First submenu
DefaultSubMenu firstSubmenu = new DefaultSubMenu("Dynamic Submenu");
DefaultMenuItem item = new DefaultMenuItem("External");
item.setUrl("http://www.primefaces.org");
item.setIcon("ui-icon-home");
firstSubmenu.addElement(item);
model.addElement(firstSubmenu);
//Second submenu
DefaultSubMenu secondSubmenu = new DefaultSubMenu("Dynamic Actions");
item = new DefaultMenuItem("Save");
item.setIcon("ui-icon-disk");
item.setCommand("#{menuBean.save}");
item.setUpdate("messages");
secondSubmenu.addElement(item);
item = new DefaultMenuItem("Redirect");
item.setIcon("ui-icon-search");
item.setCommand("#{menuBean.redirect}");
secondSubmenu.addElement(item);
model.addElement(secondSubmenu);
}
public MenuModel getModel() {
return model;
}
}
菜单不起作用,当我尝试运行项目时(我正在使用 Netbeans)我收到以下错误
找不到从“j_idt5:j_idt6”引用的表达式“messages”的组件。
我无法理解为什么会得到它,而且 Google 也无法帮助我。 大多数疑问是关于我在 MenuBean.java 中使用的注解和导入,因为 Netbeans 告诉我来自“javax.faces.bean”的注解将在下一个 JSF 版本中被弃用。
另一个奇怪的事实,在 XHTML 页面中,如果我改变了
<p:menu model="#{menuBean.model}" /> 与 <p:megaMenu model="#{menuBean.model}" />
我没有收到错误,但菜单没有呈现两个菜单项,我只看到一个带有“动态子菜单”和“动态操作”的菜单,没有任何子条目。
我错过了什么?如有必要,我愿意提供有关我的代码/项目的更多信息。
【问题讨论】:
-
查看展示中的程序化菜单:primefaces.org/showcase/ui/menu/menu.xhtml。至少您需要
部分 -
嘿,就是这样!随意发布答案,我会接受的!谢谢!
-
item.setUpdate("messages");期望有一个名为 messages 的组件以传递更新.. -
注释的 oimports 怎么样,它们是正确的吗?我假设是这样,因为菜单现在可以使用,但导入的库很快就会被弃用!
-
对于
@ManagedBean,您将改用@Named,并且范围来自cdi(javax.enterprise.context),除了ViewScope是javax.faces.view.ViewScoped
标签: jsf jsf-2 primefaces menu managed-bean