Primefaces菜单完全指南:创建菜单栏、菜单按钮、分级菜单和滑动菜单的实例教程
这个教程的主要目的是介绍与Primefaces实现一起使用的主菜单组件。通常情况下,互联网上的大量应用程序使用不同类型的菜单。该教程将介绍以下几种类型的菜单:
- 菜单(Menu):是一种带有子菜单和菜单项的导航组件。
- 菜单栏(MenuBar):是一种水平导航组件。
- 菜单按钮(MenuButton):用于在弹出菜单中显示不同的命令。
- 分级菜单(TieredMenu):用于显示带有覆盖层的嵌套子菜单。
- 滑动菜单(SlideMenu):用于显示带有滑动动画的嵌套子菜单。
让我们开始解释所有这些菜单类型,以查看Primefaces为这种组件提供的所有功能。
菜单基本信息 – Primefaces
标签 | menu |
---|---|
组件类 | org.primefaces.component.menu.Menu |
组件类型 | org.primefaces.component.Menu |
组件族 | org.primefaces.component |
渲染器类型 | org.primefaces.component.MenuRenderer |
渲染器类 | org.primefaces.component.menu.MenuRenderer |
Primefaces菜单 – 属性
名称 | 默认值 | 类型 | 描述 |
---|---|---|---|
id | null | String | 组件的唯一标识符。 |
rendered | true | Boolean | 指定组件是否渲染的布尔值,设置为false时组件将不会被渲染。 |
binding | null | Object | 映射到支持Bean中服务器端UIComponent实例的EL表达式。 |
widgetVar | null | String | 客户端小部件的名称。 |
model | null | MenuModel | 用于以编程方式创建菜单的菜单模型实例。 |
trigger | null | String | 要附加覆盖菜单的目标组件。 |
my | null | String | 菜单与触发元素对齐的角。 |
at | null | String | 触发器与菜单元素对齐的角。 |
overlay | false | Boolean | 定义菜单位置类型,可以是静态或覆盖。 |
style | null | String | 主容器元素的内联样式。 |
styleClass | null | String | 主容器元素的样式类。 |
triggerEvent | click | String | 显示动态定位菜单的事件。 |
Primefaces菜单 – 入门指南
一个菜单由子菜单和菜单项组成。子菜单用于分组菜单项,而菜单项对应所需的操作。以下示例展示了Menu组件最简单的使用方法。index.xhtml。
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form>
<p:menu>
<p:submenu label="文件">
<p:menuitem value="打开"></p:menuitem>
<p:menuitem value="编辑"></p:menuitem>
<p:separator/>
<p:menuitem value="退出"></p:menuitem>
</p:submenu>
<p:submenu label="帮助">
<p:menuitem value="关于Primefaces"></p:menuitem>
<p:menuitem value="联系我们"></p:menuitem>
<p:separator/>
<p:menuitem value="帮助"></p:menuitem>
</p:submenu>
</p:menu>
</h:form>
</html>
Primefaces 菜单 – 覆盖式菜单
菜单可以以两种方式定位:静态或动态。静态位置意味着菜单在正常页面流程中。相反,动态菜单不在页面的正常流程中,使其能够覆盖其他元素。要动态定义菜单,您应该按照以下步骤进行操作:
- 通过将overlay属性设置为true,并将菜单的trigger属性与触发操作的id相关联,来正常定义您的菜单。
- 调整菜单的my和at属性,分别指定菜单与触发元素对齐的角,以及触发元素与菜单元素对齐的角。
- my和at属性只接受left、right、bottom和top的组合值。
index1.xhtml 示例代码
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form>
<p:menu overlay="true" trigger="triggerButton" my="left top" at="right top">
<p:submenu label="File">
<p:menuitem value="Open"></p:menuitem>
<p:menuitem value="Edit"></p:menuitem>
<p:separator/>
<p:menuitem value="Exit"></p:menuitem>
</p:submenu>
<p:submenu label="Help">
<p:menuitem value="About Primefaces"></p:menuitem>
<p:menuitem value="Contact Us"></p:menuitem>
<p:separator/>
<p:menuitem value="Help"></p:menuitem>
</p:submenu>
</p:menu>
<p:commandButton id="triggerButton" value="Trigger Menu"></p:commandButton>
</h:form>
</html>
- 一旦触发菜单操作被激活,您定义的菜单就会被显示。
Primefaces菜单 – Ajax和非Ajax操作
现在,你已经开发了一个简单的静态菜单和一个更复杂的动态菜单。这两个菜单都包含与菜单所提供的操作相对应的菜单项。这些菜单项实际上也是像p:commandButton一样的操作,因此你也可以使用ajax对它们进行处理。
index2.xhtml 示例代码
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form>
<p:growl id="message"></p:growl>
<p:menu overlay="true" trigger="triggerButton" my="left top" at="right top">
<p:submenu label="File">
<p:menuitem value="Open" action="#{menuManagedBean.openAction}" update="message"></p:menuitem>
<p:menuitem value="Edit"></p:menuitem>
<p:separator/>
<p:menuitem value="Exit"></p:menuitem>
</p:submenu>
<p:submenu label="Help">
<p:menuitem value="About Primefaces"></p:menuitem>
<p:menuitem value="Contact Us"></p:menuitem>
<p:separator/>
<p:menuitem value="Help"></p:menuitem>
</p:submenu>
</p:menu>
<p:commandButton id="triggerButton" value="Trigger Menu"></p:commandButton>
</h:form>
</html>
MenuManagedBean.java 示例代码
package com.Olivia.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class MenuManagedBean {
public String openAction(){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Open action has activiated asynchrounsly !"));
return "";
}
}
Primefaces 编程式菜单创建
菜单也可以通过编程方式创建,这种方法比声明式方式更加灵活。您可以使用org.primefaces.model.MenuModel实例来定义菜单结构。p:submenu、p:menuitem和p:separator等组件都有对应的默认实现,专门用于编程式菜单定义。以下示例展示了之前开发的相同业务场景,但这次菜单将以编程方式呈现。index3.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form>
<p:growl id="message"></p:growl>
<p:menu overlay="true" trigger="triggerButton" my="left top" at="right top" model="#{menuManagedBean.menu}">
</p:menu>
<p:commandButton id="triggerButton" value="触发菜单"></p:commandButton>
</h:form>
</html>
菜单ManagedBean.java
package com.Olivia.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSeparator;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;
@ManagedBean
@SessionScoped
public class MenuManagedBean {
private MenuModel menu = new DefaultMenuModel();
public MenuManagedBean(){
// 创建子菜单
DefaultSubMenu file = new DefaultSubMenu("文件");
// 创建子菜单
DefaultSubMenu help = new DefaultSubMenu("帮助");
// 创建菜单项
DefaultMenuItem open = new DefaultMenuItem("打开");
// 创建菜单项
DefaultMenuItem edit = new DefaultMenuItem("编辑");
// 创建菜单项
DefaultMenuItem exit = new DefaultMenuItem("退出");
// 创建菜单项
DefaultMenuItem about = new DefaultMenuItem("关于Primefaces");
// 创建菜单项
DefaultMenuItem contact = new DefaultMenuItem("联系我们");
// 创建菜单项
DefaultMenuItem helpMenuItem = new DefaultMenuItem("帮助");
// 设置菜单项动作
open.setCommand("#{menuManagedBean.openAction}");
// 将菜单项关联到子菜单
file.addElement(open);
file.addElement(edit);
file.addElement(new DefaultSeparator());
file.addElement(exit);
help.addElement(about);
help.addElement(contact);
help.addElement(new DefaultSeparator());
help.addElement(helpMenuItem);
// 将子菜单关联到菜单
menu.addElement(file);
menu.addElement(help);
}
public MenuModel getMenu() {
return menu;
}
public void setMenu(MenuModel menu) {
this.menu = menu;
}
public String openAction(){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("打开操作已异步激活!"));
return "";
}
}
Primefaces 菜单栏 – 基本信息菜单栏是一个水平导航组件。
标签 | 菜单栏 |
---|---|
组件类 | org.primefaces.component.menubar.Menubar |
组件类型 | org.primefaces.component.Menubar |
组件族 | org.primefaces.component |
渲染器类型 | org.primefaces.component.MenubarRenderer |
渲染器类 | org.primefaces.component.menubar.MenubarRenderer |
Primefaces菜单栏-属性
名称 | 默认值 | 类型 | 描述 |
---|---|---|---|
id | null | 字符串 | 组件的唯一标识符。 |
rendered | true | 布尔值 | 指定是否渲染组件的布尔值,设置为false时将不渲染组件。 |
binding | null | 对象 | 映射到后端Bean中服务器端UIComponent实例的EL表达式。 |
widgetVar | null | 字符串 | 客户端小部件的名称。 |
model | null | MenuModel | 用于以编程方式创建菜单的MenuModel实例。 |
style | null | 字符串 | 菜单栏的内联样式。 |
styleClass | null | 字符串 | 菜单栏的样式类。 |
autoDisplay | false | 布尔值 | 定义是否在鼠标悬停时显示第一级子菜单。设置为false时,需要点击事件才能显示。 |
Primefaces菜单栏 – 入门指南
类似于菜单组件,菜单栏需要将p:submenu和p:menuitem作为其子元素来构成菜单栏结构。
Primefaces 菜单栏 – 嵌套菜单
菜单栏支持嵌套菜单
菜单栏支持嵌套菜单,即在另一个父级菜单内提供子菜单。index5.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:400px;">
<p:menubar>
<p:submenu label="文件">
<p:submenu label="打开">
<p:menuitem value="打开Excel文件"></p:menuitem>
<p:menuitem value="打开Word文件"></p:menuitem>
<p:menuitem value="打开PowerPoint文件"></p:menuitem>
</p:submenu>
<p:menuitem value="编辑"></p:menuitem>
<p:separator/>
<p:menuitem value="退出"></p:menuitem>
</p:submenu>
<p:submenu label="帮助">
<p:menuitem value="关于JournalDev"></p:menuitem>
<p:menuitem value="联系我们"></p:menuitem>
<p:separator/>
<p:menuitem value="帮助"></p:menuitem>
</p:submenu>
</p:menubar>
</h:form>
</html>
Primefaces菜单栏-根菜单项
菜单栏还支持根菜单项,这是通过在p:menubar中提供直接的p:menuitem子组件来实现的。
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:400px;">
<p:menubar>
<p:menuitem value="打开"></p:menuitem>
</p:menubar>
</h:form>
</html>
Primefaces菜单栏-Ajax和非Ajax操作
与p:commandButton组件一样,p:menuitem也支持将动作进行Ajax化处理。您已经在p:menu部分中体验过这一点。您可以使用p:menuitem来执行操作-Ajax和非Ajax-以及导航。以下示例向您展示了p:menuitem的不同用法。index7.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:400px;">
<p:growl id="message"></p:growl>
<p:menubar>
<p:submenu label="文件">
<p:submenu label="打开">
<p:menuitem value="Ajax操作" action="#{menubarManagedBean.ajaxAction}" update="message"></p:menuitem>
<p:menuitem value="非Ajax操作" action="#{menubarManagedBean.nonAjaxAction}" ajax="false"></p:menuitem>
<p:menuitem value="访问JournalDev" url="https://www.scdev.com"></p:menuitem>
</p:submenu>
<p:menuitem value="编辑"></p:menuitem>
<p:separator/>
<p:menuitem value="退出"></p:menuitem>
</p:submenu>
<p:submenu label="帮助">
<p:menuitem value="关于JournalDev"></p:menuitem>
<p:menuitem value="联系我们"></p:menuitem>
<p:separator/>
<p:menuitem value="帮助"></p:menuitem>
</p:submenu>
</p:menubar>
</h:form>
</html>
菜单栏管理Bean.java
package com.Olivia.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class MenubarManagedBean {
public String ajaxAction(){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ajax更新"));
return "";
}
public String nonAjaxAction(){
return "";
}
}
Primefaces菜单栏-动态菜单
PrimeFaces菜单栏动态创建
菜单栏还支持动态创建功能,您可以通过编程方式创建菜单栏,并提供Ajax、非Ajax和URL等操作,就像您在Ajax和非Ajax操作部分所做的那样。下面是一个示例:
index8.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:400px;">
<p:growl id="message"></p:growl>
<p:menubar model="#{menubarManagedBean.menubar}">
</p:menubar>
</h:form>
</html>
MenubarManagedBean.java 菜单栏管理Bean
package com.Olivia.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSeparator;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;
@ManagedBean
@SessionScoped
public class MenubarManagedBean {
private MenuModel menubar = new DefaultMenuModel();
public MenubarManagedBean(){
// 创建所需的子菜单
DefaultSubMenu file = new DefaultSubMenu("文件");
DefaultSubMenu open = new DefaultSubMenu("打开");
DefaultSubMenu help = new DefaultSubMenu("帮助");
// 创建所需的菜单项
DefaultMenuItem edit = new DefaultMenuItem("编辑");
DefaultMenuItem exit = new DefaultMenuItem("退出");
// 创建所需的菜单项
DefaultMenuItem ajaxAction = new DefaultMenuItem("Ajax操作");
ajaxAction.setUpdate("message");
ajaxAction.setCommand("#{menubarManagedBean.ajaxAction}");
DefaultMenuItem nonAjaxAction = new DefaultMenuItem("非Ajax操作");
nonAjaxAction.setAjax(false);
nonAjaxAction.setCommand("#{menubarManagedBean.nonAjaxAction}");
DefaultMenuItem urlAction = new DefaultMenuItem("访问JournalDev");
urlAction.setUrl("https://www.scdev.com");
DefaultMenuItem about = new DefaultMenuItem("关于JournalDev");
DefaultMenuItem contactUs = new DefaultMenuItem("联系我们");
DefaultMenuItem helpMenuItem = new DefaultMenuItem("帮助");
// 将菜单项与打开子菜单关联
open.addElement(ajaxAction);
open.addElement(nonAjaxAction);
open.addElement(urlAction);
// 将菜单项与帮助子菜单关联
help.addElement(about);
help.addElement(contactUs);
help.addElement(new DefaultSeparator());
help.addElement(helpMenuItem);
// 将打开子菜单与文件子菜单关联
file.addElement(open);
file.addElement(edit);
file.addElement(new DefaultSeparator());
file.addElement(exit);
// 将子菜单与菜单栏关联
this.menubar.addElement(file);
this.menubar.addElement(help);
}
public MenuModel getMenubar() {
return menubar;
}
public void setMenubar(MenuModel menubar) {
this.menubar = menubar;
}
public String ajaxAction(){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ajax更新"));
return "";
}
public String nonAjaxAction(){
return "";
}
}
PrimeFaces菜单按钮-基本信息
菜单按钮在弹出菜单中展示不同的命令。
标签 | menuButton |
---|---|
组件类 | org.primefaces.component.menubutton.MenuButton |
组件类型 | org.primefaces.component.MenuButton |
组件族 | org.primefaces.component |
渲染器类型 | org.primefaces.component.MenuButtonRenderer |
渲染器类 | org.primefaces.component.menubutton.MenuButtonRenderer |
主菜单按钮-属性
名称 | 默认值 | 类型 | 描述 |
---|---|---|---|
id | null | String | 组件的唯一标识符。 |
rendered | true | Boolean | 布尔值,用于指定组件是否渲染,设置为false时组件将不会被渲染。 |
binding | null | Object | 一个映射到支持Bean中服务器端UIComponent实例的EL表达式。 |
value | null | String | 按钮的标签 |
style | null | String | 主容器元素的样式 |
styleClass | null | String | 主容器元素的样式类 |
widgetVar | null | String | 客户端小部件的名称 |
model | null | MenuModel | 用于以编程方式创建菜单的MenuModel实例 |
disabled | false | Boolean | 禁用或启用按钮。 |
iconPos | left | String | 图标的位置,有效值为left和right。 |
appendTo | null | String | 将叠加层附加到由搜索表达式定义的元素。默认为文档主体。 |
Primefaces菜单按钮 – 入门指南
菜单按钮由一个或多个菜单项组成。其中定义的菜单项与之前已使用的具有相同的相似之处,同时还支持Ajax、非Ajax和导航操作。
index9.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:400px;">
<p:growl id="message"></p:growl>
<p:menuButton value="MenuButton">
<p:menuitem value="Ajax Action" action="#{menuButtonManagedBean.ajaxAction}" update="message"></p:menuitem>
<p:menuitem value="Non Ajax Action" action="#{menuButtonManagedBean.nonAjaxAction}" ajax="false"></p:menuitem>
<p:menuitem value="Go To JournalDev" url="https://www.scdev.com"></p:menuitem>
</p:menuButton>
</h:form>
</html>
菜单按钮管理Bean.java
package com.Olivia.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSeparator;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;
@ManagedBean(name="menuButtonManagedBean")
@SessionScoped
public class MenuButtonManagedBean {
private MenuModel menuButton = new DefaultMenuModel();
public MenuButtonManagedBean(){
}
public MenuModel getMenuButton() {
return menuButton;
}
public void setMenuButton(MenuModel menuButton) {
this.menuButton = menuButton;
}
public String ajaxAction(){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ajax更新"));
return "";
}
public String nonAjaxAction(){
return "";
}
}
Primefaces 菜单按钮 – 动态菜单
Primefaces菜单按钮的编程实现
菜单按钮也可以通过编程方式创建。在前一节中提供的MenuButton示例实际上是使用编程方法来实现的,具体代码如下所示:
index10.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:400px;">
<p:growl id="message"></p:growl>
<p:menuButton value="MenuButton" model="#{menuButtonManagedBean.menuButton}">
</p:menuButton>
</h:form>
</html>
MenuButtonManagedBean.java
菜单按钮管理Bean。
package com.Olivia.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.MenuModel;
@ManagedBean(name="menuButtonManagedBean")
@SessionScoped
public class MenuButtonManagedBean {
private MenuModel menuButton = new DefaultMenuModel();
public MenuButtonManagedBean(){
// 创建所需的菜单项
DefaultMenuItem ajaxAction = new DefaultMenuItem("Ajax Action");
ajaxAction.setUpdate("message");
ajaxAction.setCommand("#{menubarManagedBean.ajaxAction}");
DefaultMenuItem nonAjaxAction = new DefaultMenuItem("Non Ajax Action");
nonAjaxAction.setAjax(false);
nonAjaxAction.setCommand("#{menubarManagedBean.nonAjaxAction}");
DefaultMenuItem urlAction = new DefaultMenuItem("Go To JournalDev");
urlAction.setUrl("https://www.scdev.com");
this.menuButton.addElement(ajaxAction);
this.menuButton.addElement(nonAjaxAction);
this.menuButton.addElement(urlAction);
}
public MenuModel getMenuButton() {
return menuButton;
}
public void setMenuButton(MenuModel menuButton) {
this.menuButton = menuButton;
}
public String ajaxAction(){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ajax Update"));
return "";
}
public String nonAjaxAction(){
return "";
}
}
Primefaces层级菜单(TieredMenu)
用于显示带有覆盖层的嵌套子菜单。
标签 | TieredMenu |
---|---|
组件类 | org.primefaces.component.tieredmenu.TieredMenu |
组件类型 | org.primefaces.component.TieredMenu |
组件系列 | org.primefaces.component |
渲染器类型 | org.primefaces.component.TieredMenuRenderer |
渲染器类 | org.primefaces.component.tieredmenu.TieredMenuRenderer |
Primefaces层级菜单 – 属性
名称 | 默认值 | 类型 | 描述 |
---|---|---|---|
id | null | 字符串 | 组件的唯一标识符 |
rendered | true | 布尔值 | 指定组件是否渲染的布尔值,当设置为false时,组件将不会被渲染 |
binding | null | 对象 | 映射到后台Bean中服务器端UIComponent实例的EL表达式 |
widgetVar | null | 字符串 | 客户端小部件的名称 |
model | null | MenuModel | 用于编程式菜单的MenuModel实例 |
style | null | 字符串 | 组件的内联样式 |
styleClass | null | 字符串 | 组件的样式类 |
autoDisplay | true | 布尔值 | 定义是否在鼠标悬停时显示第一级子菜单。当设置为false时,需要点击事件才能显示 |
trigger | null | 字符串 | 其triggerEvent将显示动态定位菜单的组件的ID |
my | null | 字符串 | 与触发元素对齐的菜单角落 |
at | null | 字符串 | 与菜单元素对齐的触发器角落 |
overlay | false | 布尔值 | 定义定位,启用后菜单将相对于触发器以绝对位置显示。默认为false,表示静态定位 |
triggerEvent | click | 字符串 | 将显示动态定位菜单的触发器的事件名称 |
Primefaces的TieredMenu – 入门指南
Primefaces分层菜单实现
分层菜单由子菜单和菜单项组成,子菜单可以嵌套,每个嵌套的子菜单将显示在一个叠加层中。p:tieredMenu组件中的菜单项支持Ajax、非Ajax和导航操作,与之前使用的菜单项功能相同。以下示例展示了p:tieredMenu的最简单应用方式,包含了一组混合操作。index11.xhtml
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:400px;">
<p:growl id="message"></p:growl>
<p:tieredMenu>
<p:submenu label="Ajax菜单项">
<p:menuitem value="Ajax操作" action="#{tieredMenuManagedBean.ajaxAction}" update="message"></p:menuitem>
</p:submenu>
<p:submenu label="非Ajax菜单项">
<p:menuitem value="非Ajax操作" action="#{tieredMenuManagedBean.nonAjaxAction}"></p:menuitem>
</p:submenu>
<p:separator/>
<p:submenu label="导航">
<p:submenu label="Primefaces链接">
<p:menuitem value="Prime" url="https://www.prime.com.tr"></p:menuitem>
<p:menuitem value="Primefaces" url="https://www.primefaces.org"></p:menuitem>
</p:submenu>
<p:submenu label="Prime博客">
<p:menuitem value="JournalDev" url="https://www.scdev.com"></p:menuitem>
</p:submenu>
</p:submenu>
</p:tieredMenu>
</h:form>
</html>
层级菜单管理Bean.java
package com.Olivia.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class TieredMenuManagedBean {
public String ajaxAction(){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ajax更新"));
return "";
}
public String nonAjaxAction(){
return "";
}
}
Primefaces(PF)层叠菜单 – 自动展示
默认情况下,鼠标悬停在根菜单项上时会显示子菜单。将autoDisplay设置为false则需要点击根菜单项来显示子菜单。以下示例将设置p:tieredMenu组件的autoDisplay为false。
Primefaces层次菜单 – 叠加
与菜单组件一样,分级菜单也可以使用相同的方式进行叠加(请参见菜单叠加)。index11.xhtml。
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:form style="width:400px;">
<p:growl id="message"></p:growl>
<p:tieredMenu autoDisplay="false" trigger="triggerBtn" overlay="true" my="left top" at="right top">
<p:submenu label="Ajax菜单项">
<p:menuitem value="Ajax操作" action="#{tieredMenuManagedBean.ajaxAction}" update="message"></p:menuitem>
</p:submenu>
<p:submenu label="非Ajax菜单项">
<p:menuitem value="非Ajax操作" action="#{tieredMenuManagedBean.nonAjaxAction}"></p:menuitem>
</p:submenu>
<p:separator/>
<p:submenu label="导航">
<p:submenu label="Primefaces链接">
<p:menuitem value="Prime" url="https://www.prime.com.tr"></p:menuitem>
<p:menuitem value="Primefaces" url="https://www.primefaces.org"></p:menuitem>
</p:submenu>
<p:submenu label="Prime博客">
<p:menuitem value="JournalDev" url="https://www.scdev.com"></p:menuitem>
</p:submenu>
</p:submenu>
</p:tieredMenu>
<p:commandButton value="显示菜单" id="triggerBtn"></p:commandButton>
</h:form>
</html>
Primefaces TieredMenu – 客户端API
你也可以通过使用Primefaces的客户端API来控制TieredMenu组件。
方法 | 参数 | 返回类型 | 描述 |
---|---|---|---|
show() | – | void | 显示叠加菜单。 |
hide() | – | void | 隐藏叠加菜单。 |
align() | – | void | 将叠加菜单与触发器对齐。 |
第11个索引网页。
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
<script>
function showMenu(){
PF('tieredMenu').show();
}
function hideMenu(){
PF('tieredMenu').hide();
}
</script>
</h:head>
<h:form style="width:400px;">
<p:growl id="message"></p:growl>
<p:tieredMenu autoDisplay="false" trigger="triggerBtn" overlay="true" my="left top" at="right top" widgetVar="tieredMenu">
<p:submenu label="Ajax Menuitem">
<p:menuitem value="Ajax Action" action="#{tieredMenuManagedBean.ajaxAction}" update="message"></p:menuitem>
</p:submenu>
<p:submenu label="Non Ajax Menuitem">
<p:menuitem value="Non Ajax Action" action="#{tieredMenuManagedBean.nonAjaxAction}"></p:menuitem>
</p:submenu>
<p:separator/>
<p:submenu label="Navigations">
<p:submenu label="Primefaces links">
<p:menuitem value="Prime" url="https://www.prime.com.tr"></p:menuitem>
<p:menuitem value="Primefaces" url="https://www.primefaces.org"></p:menuitem>
</p:submenu>
<p:submenu label="Prime Blogs">
<p:menuitem value="JournalDev" url="https://www.scdev.com"></p:menuitem>
</p:submenu>
</p:submenu>
</p:tieredMenu>
<p:commandButton value="Show Menu - Normal Trigger" id="triggerBtn"></p:commandButton>
<p:commandButton value="Show Menu - JavaScript function" onclick="showMenu()"></p:commandButton>
<p:commandButton value="Hide Menu - JavaScript function" onclick="hideMenu()"></p:commandButton>
</h:form>
</html>
Primefaces SlideMenu – 基本信息SlideMenu用于以滑动动画方式显示嵌套子菜单。
标签 | slideMenu |
---|---|
组件类 | org.primefaces.component.slidemenu.SlideMenu |
组件类型 | org.primefaces.component.SlideMenu |
组件族 | org.primefaces.component |
渲染器类型 | org.primefaces.component.SlideMenuRenderer |
渲染器类 | org.primefaces.component.slidemenu.SlideMenuRenderer |
Primefaces SlideMenu – 属性
名称 | 默认值 | 类型 | 描述 |
---|---|---|---|
id | null | String | 组件的唯一标识符 |
rendered | true | Boolean | 布尔值,用于指定组件是否渲染,设置为false时组件将不会被渲染。 |
binding | null | Object | 映射到支持Bean中服务器端UIComponent实例的EL表达式 |
widgetVar | null | String | 客户端小部件的名称。 |
model | null | MenuModel | 用于编程式菜单的MenuModel实例。 |
style | null | String | 组件的内联样式。 |
styleClass | null | String | 组件的样式类。 |
backLabel | Back | String | 返回链接的文本。 |
trigger | null | String | 其triggerEvent将显示动态定位菜单的组件的ID。 |
my | null | String | 菜单与触发元素对齐的角。 |
at | null | String | 触发器与菜单元素对齐的角。 |
overlay | false | Boolean | 定义定位,启用时菜单将相对于触发器以绝对位置显示。默认为false,表示静态定位。 |
triggerEvent | click | String | 将显示动态定位菜单的触发器的事件名称。 |
Primefaces SlideMenu – 开始使用 – 遮罩和客户端API
PrimeFaces SlideMenu滑动菜单组件详解
SlideMenu 包含子菜单和菜单项,子菜单可以嵌套,每个嵌套的子菜单都会以幻灯片动画形式显示。SlideMenu 的功能与前一节讨论的 TieredMenu 中定义的功能类似。以下是 index12.xhtml 的代码示例:
<html xmlns="https://www.w3.org/1999/xhtml"
xmlns:ui="https://java.sun.com/jsf/facelets"
xmlns:h="https://java.sun.com/jsf/html"
xmlns:f="https://java.sun.com/jsf/core"
xmlns:p="https://primefaces.org/ui">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
<script>
function showMenu(){
PF('tieredMenu').show();
}
function hideMenu(){
PF('tieredMenu').hide();
}
</script>
</h:head>
<h:form style="width:400px;">
<p:growl id="message"></p:growl>
<p:slideMenu autoDisplay="false" trigger="triggerBtn" overlay="true" my="left top" at="right top" widgetVar="tieredMenu">
<p:submenu label="Ajax菜单项">
<p:menuitem value="Ajax操作" action="#{slideMenuManagedBean.ajaxAction}" update="message"></p:menuitem>
</p:submenu>
<p:submenu label="非Ajax菜单项">
<p:menuitem value="非Ajax操作" action="#{slideMenuManagedBean.nonAjaxAction}"></p:menuitem>
</p:submenu>
<p:separator/>
<p:submenu label="导航">
<p:submenu label="Primefaces链接">
<p:menuitem value="Prime" url="https://www.prime.com.tr"></p:menuitem>
<p:menuitem value="Primefaces" url="https://www.primefaces.org"></p:menuitem>
</p:submenu>
<p:submenu label="Prime博客">
<p:menuitem value="JournalDev" url="https://www.scdev.com"></p:menuitem>
</p:submenu>
</p:submenu>
</p:slideMenu>
<p:commandButton value="显示菜单 - 普通触发器" id="triggerBtn"></p:commandButton>
<p:commandButton value="显示菜单 - JavaScript函数" onclick="showMenu()"></p:commandButton>
<p:commandButton value="隐藏菜单 - JavaScript函数" onclick="hideMenu()"></p:commandButton>
</h:form>
</html>
以下是 SlideMenuManagedBean.java 的代码(中文释义:滑动菜单管理Bean.java):
package com.Olivia.prime.faces.beans;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class SlideMenuManagedBean {
public String ajaxAction(){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ajax更新"));
return "";
}
public String nonAjaxAction(){
return "";
}
}
总结
简言之,Primefaces为您提供了大量的UI菜单组件,这些组件为开发人员提供了丰富的选择,以满足不同用户需求。本教程旨在详细说明这些菜单类型的使用方法。欢迎在下方评论区留言,并下载本教程的源代码,为我们的项目做出贡献。
下载PrimeFaces菜单项目