我是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”的组件。
我无法理解我为什么会这样做,谷歌一直无法帮助我。 大多数疑问都与我在MenuBean.java中使用的注释和导入有关,因为Netbeans告诉我“javax.faces.bean”中的注释将在下一个JSF版本中弃用。
另一个奇怪的事实,在XHTML页面中,如果我改变
带有<p:menu model="#{menuBean.model}" />
的 <p:megaMenu model="#{menuBean.model}" />
我没有收到错误,但菜单没有渲染levle两个菜单项,我只看到一个带有“动态子菜单”和“动态操作”的菜单,没有任何子项。
我错过了什么?如有必要,我愿意提供有关我的代码/项目的更多信息。
答案 0 :(得分:4)
对我而言,首先检查Primefaces展示会更好,然后可以随时参考手册。
根据示例"Programmatic menu",您需要
部分<p:growl id="messages" showDetail="false"/>
我想这也是事实上错误信息的内容,即它的遗漏。
关于注释,请参阅建议,即here。从JSF 2.2开始,建议从JSF bean转移到CDI bean。
答案 1 :(得分:2)
无法找到带有表达式&#34;消息的组件&#34;引自&#34; j_idt5:j_idt6&#34; 意味着它无法从组件中找到 id =&#34; message&#34; 的组件id =&#34; j_idt5:j_idt6&#34; 在您的代码中有属性更新=&#34;消息&#34; ,是item.setUpdate(&#34; messages& #34);
另一个解决方案是删除item.setUpdate(&#34; messages&#34;);如果您不想更新任何内容,或者如果要更新消息,则在页面中添加带有id消息的组件。