1. 环境
JDK 1.6, JSF 1.2, Richfaces 3.2.2 GA, JSTL 1.2, Tomcat 6.0
2. 实现
Backing Bean:
package com.apple.www.beans; import java.util.ArrayList; import java.util.List; public class DynamicMenuBean { public class FakeData { private String label; private String icon; private String action; public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getAction() { return action; } public void setAction(String action) { this.action = action; } public FakeData(String label, String icon, String action) { this.label = label; this.icon = icon; this.action = action; } } private String currentAction; public void setCurrentAction(String currentAction) { this.currentAction = currentAction; } public String getCurrentAction() { return currentAction; } public List getFakeData() { // 从数据库或其他地方获取动态菜单的List List<FakeData> fakeData = new ArrayList<FakeData>(); fakeData.add(new FakeData("menu1", "icon1", "action1")); fakeData.add(new FakeData("menu2", "icon2", "action2")); fakeData.add(new FakeData("menu3", "icon3", "action3")); fakeData.add(new FakeData("menu4", "icon4", "action4")); fakeData.add(new FakeData("menu5", "icon5", "action6")); return fakeData; } public String excuteMenuAction() { // TODO Something here return currentAction; } }
JSP Page:
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%> <%@taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <---------------省略---------------> <rich:dropDownMenu value="Popup"> <c:forEach items="#{dynamicMenuBean.fakeData}" var="menu"> <rich:menuItem icon="#{menu.icon}" value="#{menu.label}" immediate="true" action="#{dynamicMenuBean.excuteMenuAction}" submitMode="server"> <f:setPropertyActionListener target="#{dynamicMenuBean.currentAction}" value="#{menu.action}" /> </rich:menuItem> </c:forEach> </rich:dropDownMenu> <---------------省略--------------->
PS: 略去Backing bean和navigation的配置